如何编写看门狗定时器以重新启动Windows服务?

4 windows service restart watchdog

我对有关Windows服务的看门狗定时器的另一个问题的答案非常感兴趣(见这里).答案说:

我还使用了另一个线程中运行的内部监视系统.该线程查看日志输出或切换事件等活动的主线程.如果未看到该活动,则认为该服务已挂起,我将关闭该服务.

在这种情况下,您可以配置窗口以自动重新启动已停止的服务,这可能会清除问题(只要它不是内部逻辑错误).

我使用的服务还包含写入日志的文本日志.此外,对于即将"睡了一会儿"的服务,我会记录下次唤醒的时间.我使用MTAIL来查看输出日志."

任何人都可以提供一些示例代码如何使用在另一个线程中运行的内部监视程序,因为我目前有一个任务来开发一个Windows服务,它将能够自动重启,以防它失败,挂断等.

我非常感谢你的帮助.

Ars*_*yan 5

您可以从服务属性配置为在发生故障时自动重启

Services -> right-click your service -> Properties -> First failure : restart the service -> Second failure : restart the service -> Subsequent failure : restart 
Run Code Online (Sandbox Code Playgroud)

  • 可能适用于某些服务,但是对于通常一直在运行但突然卡住并停止进展的服务呢? (4认同)

pax*_*blo 5

在你正在观看的过程中,我不是一个将看门狗作为线程运行的忠实粉丝.这意味着如果整个过程由于某种原因而挂起,则看门狗将无法工作.

看门狗是从硬件世界中解脱出来的一个想法,他们做对了.尽可能简单地使用外部电路(因此可以证明它是正确的).典型的看门狗只是运行一个计时器,如果进程在计时器到期之前没有做某事(比如访问看门狗正在观看的内存位置),整个过程就被重置了.当看门狗被"踢"时,它将重启计时器.

启动监视程序的过程的行为保护该进程免于摘要终止.

我的建议是编写一个非常简单的独立程序,它只监视一个事件(比如修改文件更新时间).如果该事件未在所需时间内发生,则终止正在监视的进程(并让Windows重新启动它).

然后让您观看的程序定期重写该文件.