2010-03-18 9 views
2

J'essaie de créer une application console qui surveille certains processus et les redémarre si elle se termine. Ainsi, l'application de la console est toujours activée, le seul travail consiste à redémarrer un autre processus.Boucle de redémarrage du processus C#

J'ai posté mon code ci-dessous .. il fonctionne essentiellement, mais juste pour un redémarrage du processus ...

Je vous serais reconnaissant toute aide !!

Merci d'avance!

{ 
     System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcessesByName(SOME_PROCESS); 
     p[0].Exited += new EventHandler(Startup_Exited); 

     while (!p[0].HasExited) 
     { 
      p[0].WaitForExit(); 
     } 

     //Application.Run(); 
    } 

    private static void Startup_Exited(object sender, EventArgs e) 
    { 
     System.Diagnostics.Process.Start(AGAIN_THAT_SAME_PROCESS); 
    } 
+0

Si possible, vous devez envisager d'exécuter l'autre processus en tant que service. Le gestionnaire de contrôle de service dans Windows dispose déjà de fonctionnalités pour redémarrer un processus qui se termine anormalement. – Josh

Répondre

2

Vous avez besoin d'une boucle, et en haut de la boucle, vous devez rattacher p au nouveau processus après le redémarrage du programme. Donc, quelque chose comme:

Process p = /* get the current instance of the program */; 
while (true) 
{ 
    p.WaitForExit(); 
    p = Process.Start(/* the program */); 
} 

Notez que depuis Process.Start renvoie l'objet de processus pour la nouvelle instance, vous n'avez pas réellement besoin refaire la recherche: vous pouvez simplement attendre directement sur le nouvel objet de processus.

+0

qui était rapide :) plus, cela a fonctionné comme un charme !! Merci! – Andrej

0

Je serais prêt à parier que, lors du démarrage de votre nouveau processus, vous devez mettre à jour le processus p [0] pointe vers et rattachez votre gestionnaire d'événements. Il semble qu'une fois qu'il meurt, votre événement se déclenche et vous n'avez plus jamais un gestionnaire d'événements enregistré avec un processus.