Цикл перезапуска процесса C # - PullRequest
2 голосов
/ 18 марта 2010

Я пытаюсь создать консольное приложение, которое будет отслеживать какой-либо процесс и перезапускать его, если он завершится. Итак, консольное приложение всегда включено, его задача - перезапустить какой-то другой процесс.

Я разместил свой код ниже .. он в принципе работает, но только для одного перезапуска процесса ...

Буду признателен за любую помощь !!

Заранее спасибо!

    {
        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);  
    }

Ответы [ 2 ]

2 голосов
/ 18 марта 2010

Вам нужен цикл, и в верхней части цикла вам нужно заново присоединить p к новому процессу после перезапуска программы. Так что-то вроде:

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

Обратите внимание, что, поскольку Process.Start возвращает объект Process для нового экземпляра, вам фактически не нужно повторно выполнять поиск: вы можете просто ждать непосредственно нового объекта Process.

0 голосов
/ 18 марта 2010

Я хотел бы поспорить, что после повторного запуска вашего процесса вам необходимо обновить процесс, на который указывает p [0], и заново подключить ваш обработчик событий. Похоже, что после его смерти происходит событие, и вы никогда не регистрируете обработчик событий в процессе снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...