Windows services 如何获取windows服务的当前故障计数

Windows services 如何获取windows服务的当前故障计数,windows-services,reset,counter,Windows Services,Reset,Counter,我有一个服务,当某些资源不可用时将失败。我已将其配置为尝试重新启动两次,然后在第三次尝试时向我发送短信。不幸的是,windows只允许您在特定天数后重置故障计数,而我真的希望它在每三次故障时重置一次。问题是,一旦服务再次运行,再出现一次故障将导致它发送另一条短信,甚至不会尝试重新启动服务 所以我想在我的短信脚本中包含一些代码来重置失败计数器。我已找到以下注册表位置: HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\ 其中包括故障操

我有一个服务,当某些资源不可用时将失败。我已将其配置为尝试重新启动两次,然后在第三次尝试时向我发送短信。不幸的是,windows只允许您在特定天数后重置故障计数,而我真的希望它在每三次故障时重置一次。问题是,一旦服务再次运行,再出现一次故障将导致它发送另一条短信,甚至不会尝试重新启动服务

所以我想在我的短信脚本中包含一些代码来重置失败计数器。我已找到以下注册表位置:

HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\

其中包括故障操作的(二进制)设置,但据我所知没有计数器

sc
命令允许您查询各种内容,但也不会返回失败计数


理想情况下,我想要一种通过编程方式查询/重置故障计数器的方法,但是命令行或注册表解决方案就可以了(因为我可以编写脚本)。

Win32 API允许您指定在X秒数后重置故障计数,而不是X天数。查看SERVICE_FAILURE_ACTIONS结构的dwResetPeriod成员


故障计数器本身的一个值,该值在SCM内部私自维护,它知道自Windows启动以来给定服务发生了多少次故障。应用程序无法手动重置该计数器,甚至无法查询。

我是名为Daemoniq的开源windows服务托管框架的开发人员。这是它的特点之一。你可以从

目前的特点包括:

  • 通过CommonServiceLocator的容器不可知服务位置
  • 通过app.config设置公共服务属性,如serviceName、displayName、description和serviceStartMode
  • 在同一进程上运行多个windows服务
  • 通过app.config设置恢复选项
  • 通过app.config设置所依赖的服务
  • 通过命令行设置服务进程凭据
  • 通过命令行安装、卸载、调试服务

我正在研究这个问题,我相信您可以通过WMI/root/cimv2:Win32_服务接口来实现。我将继续研究并回复您。无法通过WMI接口执行此操作。我不知道该如何帮助。我会继续做一些检查。@Wayne:谢谢你的调查。我不是win32 api专家,所以我真的不知道从哪里开始。你会认为会有办法的。多么令人震惊的不足!这意味着“每三次失败发短信”这样的行为是不可能的。通过API,我可以设置重置时间,使其与等待-重新启动-等待-重新启动sms周期一致,但a)假设故障时间可预测,B)当UI无法处理这些设置时,我不喜欢通过API配置服务。