我想创建一个监视另一个Windows服务的Windows服务,并确保它正常工作。 有时我想要观看的Win服务留在内存中(出现在任务管理器中,因此它被认为是一个正在运行的服务,但事实是它什么也没做,它已经死了,它的计时器因为一个原因没有触发,这不是这个问题的主题。)
我需要的是制作看门狗Win Service,以某种方式读取内存中的值,其他观看的服务定期写入。 我想过使用命名管道,但我不想在我的服务中添加通信问题,我想知道是否有办法在两个应用程序之间创建这样的共享内存(可能使用命名的系统范围的Mutex?)
答案 0 :(得分:2)
由于您必须处理检测僵尸服务,我不认为使用像互斥锁这样的内核对象会有所帮助,您需要检测活动。信号量也不合适。
我的个人偏好是发送小心跳消息的命名管道(因为它也可以通过网络检测到),但如果你想避免管道通信的复杂性 - 我想这是可以理解的 - 那么你可以更新预定注册表项中的DWORD。如果两个服务都在LocalSystem下运行,您可以将键/值写入HKEY_LOCAL_MACHINE。运行一个抽水计时器并经常注意钥匙的更换(注意计数器环绕)。您将没有正常的窗口/消息泵,因此SetTimer是禁止的,但您仍然可以使用timeSetEvent或等待计时器。
如果其中一项服务在非管理员帐户下运行,HKLM将无法使用,但对于服务而言,这种情况非常罕见。当然,所有这些都假设您可以访问这两种服务的代码。观看第三方服务会严重限制您的选择。