2009-12-30 83 views
2

我想做一个Windows服务,监视另一个Windows服务,并确保它正在工作。 有时我想看的Win服务留在内存中(出现在任务管理器中,所以它被认为是一个正在运行的服务,但事实是它什么都不做,它已经死了,它的计时器不会因为某种原因而被解雇,这不是这个问题的主题)。看门狗赢得服务观看另一个赢得服务

我需要做的是制作一个看门狗Win服务,以某种方式读取其他服务定期写入的内存值。 我想过使用命名管道,但我不想添加通信问题到我的服务,我想知道是否有办法在2个应用程序之间创建这样的共享内存(可能使用命名系统宽度的互斥量?)

+0

什么要看您的看门狗服务? – 2009-12-30 14:58:05

+0

看门狗将非常简单,它也不太可能卡住 – 2010-01-05 07:51:19

回答

2

既然你必须处理检测僵尸服务,我不认为使用像互斥这样的内核对象会有所帮助,你需要检测活动。信号量也不太合适。

我个人的偏好是发送小心跳消息的命名管道(因为它也可以在网络中检测到),但是如果你想避免管道通信的复杂性 - 我想这是可以理解的 - 那么你可以更新预定注册表项中的DWORD。如果两个服务都在LocalSystem下运行,您可以将一个键/值写入HKEY_LOCAL_MACHINE。运行一个泵送计时器并且每隔一段时间观察一次钥匙的变化(注意计数器环绕)。您不会有正常的窗口/消息泵,因此SetTimer处于禁用状态,但您仍然可以使用timeSetEvent或等待定时器。

如果其中一项服务在非管理帐户下运行,HKLM将不可用,但这对于服务来说是非常罕见的情况。当然,所有这些都假定你可以访问这两种服务的代码。观看第三方服务会严重限制您的选择。