Un seul process avec notification de demande d'ouverture
cs_Yxion
Messages postés219Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 7 septembre 2009
-
14 nov. 2007 à 13:55
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 2016
-
19 nov. 2007 à 23:59
Bonjour,
Mon titre n'est pas clair, et c'est pour cela que mes recherches ne donnent rien.
Je cherche à faire en sorte que mon application ne puisse se lancer qu'une fois, mais que lorsque que l'on tente de la lancer plus d'une fois, que l'application déjà lancer recoive un message pour lui signaler la demande.
Mon but est de pouvoir lancer une autre fenêtre principale, mais dans le même contexte(meme process) afin de limiter et partager certains objets en mémoire et éviter certains accès concurentiels sur des fichiers.
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 14 nov. 2007 à 15:19
Hello,
Pour vérifier le lancement d'autres instances de l'application, regarde du côté de Process.GetProcessByName. Si le résultat contient plus de 1 process, c'est qu'il y en a déjà un en cours.
Pour dialoguer entre tes process, c'est un peu plus compliqué. Tu peux passer par des queues de messages (style MSMQ), ou faire du remoting, par exemple avec IPC.
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
cs_Yxion
Messages postés219Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 7 septembre 2009 15 nov. 2007 à 17:31
Le problème est que j'utilise un "ApplicationContext" et que je n'ai pas forcément de fenêtre principale active, j'ai juste un icone Systray.
J'ai mis un filtre de message dans ma classe héritant de ApplicationContext, ca marche tout très bien tant que j'ai un formulaire actif.
J'aimerais savoir s'il est possible d'utiliser un Handle globale au processus pour envoyer un message avec PostMessage
J'ai essayé ca (j'ai sans doute fait n'inporte quoi):
Process current = Process.GetCurrentProcess();
Process[] processCollection = Process.GetProcessesByName(current.ProcessName);
foreach (Process process in processCollection)
{
if (process.Handle == current.Handle) continue;
API.PostMessage(process.Handle, wmId, IntPtr.Zero, IntPtr.Zero);
}
Mais ca ne fonctionne pas, il y a jamais de process.Handle == current.Handle
<hr />I love .net
cs_Yxion
Messages postés219Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 7 septembre 2009 19 nov. 2007 à 16:58
Ca ne réponds pas à ma question, je le sais ca, et je m'en arrange, je veux juste communiquer un message sur autre chose que le pointeur du MainForm qui peut etre null