我有一个现在部署的服务器进程,我想让我的服务器保持运行。 如果该进程通过某种方式崩溃,无论是某种异常还是任何其他技术流程,那么我需要重新启动它。
为此,我创建了另一个进程,在进程列表中继续检查(例如,每2分钟)此特定进程名称,如果没有找到,它将启动该进程。
我已经实施了这个解决方案,但我知道这不是一个好主意,我相信必须有一些更好的想法来完成这项工作。你能帮助我最好的方法,还是建议一些更好的方法?
出于某些限制,我无法将我的服务器进程部署为Windows服务,它是一个Windows窗体应用程序。
感谢。
答案 0 :(得分:4)
您没有发布任何代码,但您提到“每隔两分钟检查进程列表”。我认为更好的解决方案是让您的监督程序流程成为父流程。它会调用CreateProcess将EXE作为子进程启动。然后在子进程句柄上执行WaitForSingleObject。一旦WaitForSingleObject返回(表示子进程已退出),它就会重新启动它。
CreateProcess和WFSO的.Net等价物是Process.Start和Process.WaitForExit。
答案 1 :(得分:2)
正如你所说,解决方案远非最佳。 Windows服务已自动重启。
在您的情况下,我会从Windows任务调度程序启动您的看门狗进程,以避免看门狗死亡时出现问题。