2010-10-12 2 views
0

J'utilise le Process Class pour démarrer des processus, mais je ne veux pas que plus d'une instance d'un programme soit en cours d'exécution. En regardant la documentation, il y a beaucoup de propriétés qui ont l'air vraisemblables, mais rien de ce qui ressort comme le plus évident.La classe de processus peut-elle être utilisée pour déterminer si un processus est déjà en cours d'exécution?

Quelle est la meilleure façon de déterminer si un processus est en cours d'exécution?

Editer: John Fisher a raison: c'est une application existante que je démarre et que je suis incapable de modifier.

Répondre

1

Vous pouvez appeler cette méthode

Process.GetProcesses() 

et boucle à travers le résultat (une collection de type Process) pour voir si le nom correspond. Quelque chose comme ceci:

foreach (Process prc in Process.GetProcesses()) 
{ 
    if (prc.ProcessName.Contains(MyProcessName)) 
    { 
     //Process is running 
    } 
} 
0

Vous devez utiliser le modèle d'application Singleton pour que:

bool createdNew = true; 
using (var mutex = new Mutex(true, "YourProcessName", out createdNew)) 
{ 
    if (createdNew) 
    { 
     // Run application 
    } 
} 
+0

Cela ne fonctionnera que s'il essaie de démarrer une application qu'il a écrit et que vous pouvez modifier. –

1

Je suppose que tout dépend de ce que vous entendez par « meilleure façon »? Voulez-vous dire le plus rapide, le plus précis, ou celui qui va gérer certaines circonstances étranges?

La façon dont je voudrais commencer est en listant les processus et en vérifiant le nom du fichier exécutable par rapport à celui que j'essaie de démarrer. Si elles correspondent (cas insensible), il est probablement en cours d'exécution.

Questions connexes