如何检测自动NT服务将启动

时间:2011-05-10 08:46:30

标签: c++ windows winapi windows-services

我正在使用一个简单的NT服务,该应用程序将监视它并在任务栏中显示状态。启动监视器时检查服务是否正在运行,如果不是则提示启动它。这可以在显示器在服务之前启动时重启,并提示启动它,即使它会自动启动。

通过阅读文档,我认为状态将报告为SERVICE_START_PENDING,这是服务在进入服务主函数时所做的第一件事,但似乎状态报告为SERVICE_STOPPED如果SCM尚未开始启动该服务。有没有办法检测到该服务很快就会开始启动?

谢谢, Ĵ

2 个答案:

答案 0 :(得分:2)

我认为没有办法预测服务控制经理将来会做些什么。但是,我可以想到一些可以缓解你情况的事情:

  • 定期监控服务状态,当它“开始”时,适当更新您的图标状态

  • 检查进程的自动启动设置,如果它设置为自动,并且您的监控程序刚刚启动,则延迟报告该服务未运行(假设它可能很快就会启动)。

答案 1 :(得分:1)

您可能同时需要QueryServiceConfigQueryServiceConfig2()。获取SERVICE_CONFIG_DELAYED_AUTO_START_INFO数据需要第二次调用。