Verifier si un executable est en cours d'execution
ebooserge
Messages postés137Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention16 juillet 2007
-
20 mars 2006 à 19:48
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 2011
-
20 mars 2006 à 22:38
salut a tous,
j'aimerais savoir quelle approche peut etre adoptée pour vérifier si une instance d'une application est en cours d'execution.
le but de ma demarche est d'empecher le lancement de plusieurs instance de mon executable.
a small idea ? thanks
Pamaury
Messages postés341Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention17 juin 20083 20 mars 2006 à 20:48
Il y a plusieurs façon mais il me semble que une évidente serait au lancement de l'exéutable de parcourir la liste des processus en cours d'exécution et de vérifier qu'il n'y ai pas déjà .
Tu peux utiliser ces fonctions:
HANDLE WINAPICreateToolhelp32Snapshot( DWORDdwFlags,
DWORDth32ProcessID );
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 20 mars 2006 à 20:50
Le plus simple reste le mutex.
Si ton application tente de créer un mutex qui existe déja (preve que ton programme est déja lancé), alors la fonction return false!
Utilise la fonction CreateMutex()! (jai mis une source pourrave sur le mutex...je dis pourrave vu la longueur du code et l'interet final)
Donc dans ton main, en premiere ligne :
if( !CreateMutex(...) ) return 0; // quitte le programme
Petite parenthèse...ma technique est limitée...elle répond parfaitement à ton problême mais reste bien simple. BruNews avait effectivement procéder par file mapping afin si je me souviens bien (ça date de plusieurs mois, voire années) que ça remette la fenêtre en foreground si jamais tu voulais lancer une seconde instance! ça marche très bien, mais c'est de niveau plus élevé et c'est bien plus long...(mais forcément plus pratique)...enfin faut ausis que ton programme ait l'intention d'afficher une fenetre ! lol