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

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

我也用一个内部看门狗系统在另一个线程中运行。 该线程查看活动的主线程,如日志输出或切换事件。 如果没有看到该活动,则该服务被视为挂起,并closures该服务。

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

我所使用的服务还有写入日志的文本日志。 此外,对于即将“睡一会儿”的服务,我记下下次醒来的时间。 我使用MTAIL来查看输出日志。“

任何人都可以给一些示例代码如何使用内部看门狗运行在另一个线程,因为我目前有一个任务开发一个Windows服务,将能够自我重启,以防万一它失败,挂起等。

我非常感谢你的帮助。

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

看门狗是一个从硬件世界中解脱出来的想法,他们是对的。 使用一个尽可能简单的外部电路(所以它可以证明是正确的)。 典型的看门狗只是运行一个定时器,如果在定时器过期之前进程没有做任何事情(比如访问看门狗正在监视的内存位置),则整个事件被重置。 当看门狗被“踢”时,它会重启计时器。

踢监督的过程的行为保护了这个过程从总结终止。

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

然后让你观看的节目定期重写该文件。

如果发生故障,您可以从服务属性进行配置以自我重新启动

Services -> right-click your service -> Properties -> First failure : restart the service -> Second failure : restart the service -> Subsequent failure : restart 

除了定期修改文件的最后写入时间之外,您可能还需要考虑的其他方法是创建适当的性能计数器甚至WMI对象。 我们在构建基础设施的时候做了后面的工作,“诀窍”是在被监测的服务中找到一个有意义的工作单元,并在每个单元完成时发出“心跳”脉冲。

WMI或者Perf Counters在文件方法上的优势是你可以看到大量专业的MIS /管理工具。 这可以增加很多价值。