2009-03-31 10 views
2

Je suis assez familier avec la classe System.Diagnostics.Process. Mais, je me demande comment je peux surveiller un processus spécifique (c'est-à-dire vérifier si cela fonctionne toutes les XX minutes/secondes). Je dois être en mesure de vérifier si un processus est en cours et si c'est le cas, continuez à initialiser le reste du programme.Surveillance du processus

Merci,
-Zack

Répondre

4

Si vous n'avez pas commencé le processus vous-même, vous obtenez trouver l'objet Process associé à un processus en regardant à travers la liste retournée par Process.GetProcessesByName(...) ou Process.GetProcesses(...)

Une fois que vous avoir le processus, vous pouvez écouter lire ses propriétés (y compris HasExited) et (comme Jon mentionne dans sa réponse) si vous définissez EnableRaisingEvents vous pouvez écouter ses événements (y compris Exited).

5

vérifier si elle est toujours en cours d'exécution est facile: Process.HasExited.

Plutôt que d'interroger cette périodiquement, cependant, vous pouvez définir EnableRaisingEvents à true et attacher un gestionnaire à l'événement Exited.

EDITER: Pour répondre à la question dans le commentaire sur "aller chercher" le processus - cela dépend de ce que vous savez déjà. Si vous connaissez son ID de processus, vous pouvez utiliser Process.GetProcessById. Si vous ne connaissez que son nom, vous devrez utiliser Process.GetProcessesByName et déterminer ce qu'il faut faire si vous obtenez plusieurs résultats. Si vous ne connaissez pas le exact nom, vous pouvez utiliser Process.GetProcesses et chercher tout ce que vous faire savoir à ce sujet. Ces options sont effectivement en ordre de préférence :)

+0

Qu'en est-il de l'extraction du processus réel et de son fonctionnement? – Zack

+0

Merci, j'ai fait une combinaison des vôtres et des solutions de Daniel. – Zack

+0

si mon application a exeption non gérée et ne pas fermer le processus mais freez et aucune réponse comment obtenir le statut? –

-1

Quelque chose comme ça, peut-être?

 Process[] processlist = Process.GetProcesses(); 

     bool found = false; 
     foreach (Process theprocess in processlist) 
     { 
      if(theprocess.ProcessName == "YourProcessName") 
      { 
       found = true; 
       break; 
      } 
     } 

     if (!found) 
     { 
      return; 
     } 
+1

Si vous connaissez le nom réel, vous pouvez également utiliser GetProcessesByName ... –

Questions connexes