如何获得Windows服务的当前故障计数

时间:2009-12-07 18:26:21

标签: windows-services reset counter

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

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

HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \服务\

其中包含失败行动的其他事项(二进制)设置,但据我所知,没有计数器。

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

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

2 个答案:

答案 0 :(得分:0)

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

对于故障计数器本身,它是在SCM内部私有维护的,它知道自Windows启动以来给定服务失败的次数。应用程序无法手动重置该计数器,甚至无法查询。

答案 1 :(得分:0)

我是一个名为Daemoniq的开源Windows服务托管框架的开发人员。 Setting service recovery options是其功能之一。您可以从http://daemoniq.org

下载

目前的功能包括:

  • 通过CommonServiceLocator
  • 与容器无关的服务位置
  • 通过app.config
  • 设置serviceName,displayName,description和serviceStartMode等公共服务属性
  • 在同一进程上运行多个Windows服务
  • 通过app.config设置恢复选项
  • 依据via app.config
  • 设置服务
  • 通过命令行
  • 设置服务流程凭据
  • 通过命令行安装,卸载,调试服务

谢谢!