我有一个Windows应用程序,我需要运行多个实例,使用不同的命令行参数。该应用程序非常不稳定,每48小时左右就会崩溃。
由于手动检查故障并重新启动,如果不是我喜欢做的事情,我想写一个“经理程序”。它会启动程序(所有实例),然后观察它们。如果进程崩溃,它将重新启动。
在Linux中我可以使用fork()和pids来实现这一点,但这显然在Windows中不可用。那么,我应该尝试实现CreateProcess版本还是有更好的方法?
答案 0 :(得分:1)
当您调用CreateProcess
时,将返回您传递给hProcess
的流程信息结构的CreateProcess
成员中新流程的句柄。您可以使用此句柄来检测进程何时终止。
例如,您可以创建另一个线程并调用WaitForSingleObject(hProcess)
并阻塞,直到进程终止。然后你可以决定是否重新启动它。
或者您可以致电GetExitCodeProcess(hProcess, &exitcode)
并测试exitcode
。如果它具有值STILL_ACTIVE
,那么您的进程尚未终止。这种基于GetExitCodeProcess
的方法需要进行轮询。
答案 1 :(得分:1)
如果它可以作为守护程序运行,确保它继续运行的最简单方法是Non-Sucking Service Manager。
它将允许作为未设计为服务的win32服务应用程序运行。如有必要,它将监视并重新启动。如果需要任何自定义,则包含源代码。
您需要做的就是将每个实例定义为服务,并使用所需的参数,其余部分将完成。
如果您有某种安全警察限制且无法使用第三方工具,则必须进行编码。 David Heffernan给出的答案适合你。
或者它可以在批处理,vbs或js中完成,无需系统之外的任何东西。 WMI Win32_Process类应该允许您处理它。