我正在尝试创建一个控制台应用程序来监视某些进程并在它退出时重新启动它。 因此,控制台应用程序始终处于打开状态,唯一的工作就是重新启动其他进程。
我在下面发布了我的代码..它基本上可以工作,但只是一个进程重启...
我很感激任何帮助!
提前致谢!
{
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 :(得分:2)
您需要一个循环,并且在循环的顶部,您需要在重新启动程序后将p
重新附加到新进程。如下所示:
Process p = /* get the current instance of the program */;
while (true)
{
p.WaitForExit();
p = Process.Start(/* the program */);
}
请注意,由于Process.Start返回新实例的Process对象,因此您实际上不需要重新执行搜索:您可以直接在新的Process对象上等待。
答案 1 :(得分:0)
我愿意打赌,在重新启动进程后,您需要更新p [0]指向的进程并重新附加事件处理程序。看来,一旦它死了,你的事件就会触发,你再也没有一个事件处理程序注册过程。