Redirection de parametres vers une seul instance

bestouinouin Messages postés 18 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 4 janvier 2007 - 3 févr. 2006 à 19:27
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Derniè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.

4 réponses

Le_proprio_de_mykeyes Messages postés 60 Date d'inscription mardi 26 juillet 2005 Statut Membre Dernière intervention 16 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.
0
Le_proprio_de_mykeyes Messages postés 60 Date d'inscription mardi 26 juillet 2005 Statut Membre Dernière intervention 16 avril 2006
9 févr. 2006 à 02:34
J'ai oublié de te dire que dans 3.) tu peux ajouter à la fin "System.IO.File.Delete("temp_args.arg")" pour supprimer le fichier temporaire.

J'espère que ça t'a aidé
0
bestouinouin Messages postés 18 Date d'inscription mercredi 13 août 2003 Statut Membre Derniè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
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
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.

/*
coq
MVP Visual C#
*/
0
Rejoignez-nous