Domanda

Sto cercando di fare una console app che avrebbe dovuto monitorare qualche processo e riavviarlo se esce. Quindi, l'applicazione console è sempre acceso, è solo compito è quello di riavviare un altro processo.

ho postato il mio codice seguente .. funziona fondamentalmente, ma solo per un riavvio processo ...

Gradirei qualsiasi aiuto !!

Grazie in anticipo!

    {
        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);  
    }
È stato utile?

Soluzione

Hai bisogno di un ciclo, e nella parte superiore del ciclo è necessario ricollegare p al nuovo processo dopo il riavvio del programma. Quindi, qualcosa di simile a:

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

Si noti che, dal momento Process.Start restituisce l'oggetto Processo per la nuova istanza, non è effettivamente bisogno di ri-eseguire la ricerca:. Si può solo aspettare direttamente sul nuovo oggetto di processo

Altri suggerimenti

Sarei pronto a scommettere che, all'avvio di nuovo il processo, è necessario aggiornare il processo che p [0] punta verso e riattaccare il vostro gestore di eventi. Sembra che una volta che muore, i tuoi generato l'evento e non avete mai un gestore di eventi registrati con un processo di nuovo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top