Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#进程重启循环_C#_Process_Restart - Fatal编程技术网

C#进程重启循环

C#进程重启循环,c#,process,restart,C#,Process,Restart,我正在尝试制作一个控制台应用程序,它将监视某个进程,并在它退出时重新启动它。 因此,控制台应用程序始终处于打开状态,它唯一的任务是重新启动其他进程 我把我的代码贴在下面。。它基本上可以工作,但只需重新启动一个进程 我将感谢任何帮助 提前谢谢 { System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcessesByName(SOME_PROCESS); p[0].Exited +

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

我把我的代码贴在下面。。它基本上可以工作,但只需重新启动一个进程

我将感谢任何帮助

提前谢谢

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

我敢打赌,在再次启动进程时,您需要更新p[0]指向的进程,并重新连接事件处理程序。一旦它消失,您的事件就会触发,并且您再也没有向进程注册过事件处理程序。

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

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

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

如果可能的话,您应该考虑将另一个进程作为服务来运行。Windows中的服务控制管理器已具有重新启动异常终止的进程的功能。