是否可以创建一个 Windows 服务来创建和维护另一个进程?就像我正在编写一个程序,并说病毒杀死了该进程,我可以让我的窗口服务运行并基本上“监视”它吗?我已经有一个常规应用程序的代码,该应用程序保持运行并在程序当前未运行时执行该程序,以使其保持运行。
我以前从未编写过服务,但是仅仅编写这个简单的程序会很难吗,它基本上会检查进程是否正在运行,如果没有,它会执行它并休眠几分钟?
谢谢。
对的,这是可能的。第三方应用程序具有看门狗服务以在发生崩溃时保持运行的情况并不少见。服务可以使用 枚举正在运行的进程EnumProcesses()
,如果所需的可执行文件没有运行,则使用 启动它的新副本CreateProcessAsUser()
。
如果服务是第一个启动可执行进程的服务,或者可以在枚举后找到它,则一种优化是保持进程的打开句柄(由返回CreateProcess...()
,或使用OpenProcess()
枚举返回的进程 ID),然后使用等待功能,例如WaitForSingleObject()
,来检测进程何时停止运行。这样,您不必枚举进程来确定预期的进程是否仍在运行。