2

我正在尝试制作一个控制台应用程序来监视某些进程并在它退出时重新启动它。因此,控制台应用程序始终处于打开状态,唯一的工作就是重新启动其他进程。

我在下面发布了我的代码..它基本上可以工作,但只是为了一个进程重新启动......

我将不胜感激任何帮助!!

提前致谢!

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

2 回答 2

2

您需要一个循环,并且在循环的顶部,您需要在重新p启动程序后重新附加到新进程。所以像:

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

请注意,由于 Process.Start 返回新实例的 Process 对象,因此您实际上不需要重新执行搜索:您可以直接等待新的 Process 对象。

于 2010-03-18T00:06:00.513 回答
0

我敢打赌,在再次启动您的流程时,您需要更新 p[0] 指向的流程并重新附加您的事件处理程序。看来,一旦它死了,您的事件就会触发,并且您再也不会向进程注册事件处理程序。

于 2010-03-18T00:03:25.097 回答