bestouinouin
Messages postés18Date d'inscriptionmercredi 13 août 2003StatutMembreDernière intervention 4 janvier 2007
-
3 févr. 2006 à 19:27
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
9 févr. 2006 à 09:36
Bonjour,
Voila je debute en C# et sur le forum ... J'aimerai lorsque mon application est lancé, et que je reexecute l'executable avec des parametres, bloqué l'execution du second lancement tout en recuperant les parametres et les passer à ma premiere instance(style ajouté des morceaux à une playlist style winamp,media player ...).
J'ai trouvé comment recupere les argument passé a un programme et comment bloqué a une seul instance un programme, mais je n'ai pas trouvé comment faire une "compilation" des deux. J'espere que j'ai été assez clair.
Le_proprio_de_mykeyes
Messages postés60Date d'inscriptionmardi 26 juillet 2005StatutMembreDernière intervention16 avril 2006 9 févr. 2006 à 02:31
Tu pourais toujours:
1.)Enregistrer les paramètres dans un fichier----
public static void WriteFile(string[] args){
System.IO.StreamWriter Fichier = System.IO.File.CreateText(@"C:\temp_args.arg");
string toWrite = "";
for (int i=0;i<args.Length;i++){
toWrite+= args[i]+"|";
}
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"\|$");
toWrite = reg.Replace(toWrite,"");
MessageBox.Show(toWrite);
Fichier.Write(toWrite);
Fichier.Close();
}
----
2.) Ajouter ceci dans Main(), en remplacant [TaClasse] par la classe qui contient la fonction Main et [TonExecutable] avec le nom de l'executable sans le .exe---
if (System.Diagnostics.Process.GetProcessesByName("[TonExecutable]").Length == 1){
Application.Run(new [TaClasse]());
}
else{
[TaClasse].WriteFile(args);
}
----
3.) Ajouter le Contrôle Timer de Windows, mettre Enabled à "true" et Interval à "1000". créez une fonction pour l'événement "Elapsed" et mettez ceci----
System.IO.StreamReader sr = System.IO.File.OpenText(@"temp_args.arg");
string[] args = sr.ReadToEnd().Split(System.Convert.ToChar("|"));
sr.Close();
----
Ça devrait fonctionner, si j'ai compris ce que tu voulais dire. Dans 3.) tout ce qu'il reste c'est de traiter le tableau args pour en faire ce que tu veux.
bestouinouin
Messages postés18Date d'inscriptionmercredi 13 août 2003StatutMembreDernière intervention 4 janvier 2007 9 févr. 2006 à 08:11
Merci pour ta solution. J'y avais pensé mais je pensé qu'il y avait d'autre solution que d'utiliser un fichier. Je vais continuer a chercher et si je ne trouve pas je prendré ta solution. Merci encore
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 9 févr. 2006 à 09:36
Salut,
Effectivement ça peut être une solution, mais elle peut aussi potentiellement poser un problème de sécurité.
Déjà pour ce genre de tâche il vaudrait mieux commencer par utiliser un répertoire propre à l'utilisateur pour lesquels les ACL sont restrictives vis à vis des autres utilisateurs du système.
L'autre raison étant que rien ne garantis qu'un autre répertoire soit accessible en écriture pour l'utilisateur de l'appli.
Mais même avec ça, rien n'empêche une autre application d'accèder à ce fichier.
Une solution pourrait être d'utiliser IsolatedStorage pour le fichier temporaire.
Sinon en dehors de cette méthode on peut aussi passer pour des mécanisme comme le Remoting (sur localhost uniquement), souvent utilisé pour cette tâche je pense, mais qui peut poser un problème si ton application est destiné au grand public : certains utilisateurs rendu un peu paranoïaques par leurs firewalls applicatifs vont te bloquer la communication, même sur le localhost.
Sinon il reste aussi les techniques comme les mailslots, named pipes, etc mais le Framework (du moins dans sa version 1.1, et je n'ai pas eu vent d'une prise en charge dans le 2.0) ne fournit pas de wrapper pour les méthodes de l'API WIn32 permettant de les manipuler.