我正在使用一个简单的NT服务,该应用程序将监视它并在任务栏中显示状态。启动监视器时检查服务是否正在运行,如果不是则提示启动它。这可以在显示器在服务之前启动时重启,并提示启动它,即使它会自动启动。
通过阅读文档,我认为状态将报告为SERVICE_START_PENDING
,这是服务在进入服务主函数时所做的第一件事,但似乎状态报告为SERVICE_STOPPED
如果SCM尚未开始启动该服务。有没有办法检测到该服务很快就会开始启动?
谢谢, Ĵ
答案 0 :(得分:2)
我认为没有办法预测服务控制经理将来会做些什么。但是,我可以想到一些可以缓解你情况的事情:
定期监控服务状态,当它“开始”时,适当更新您的图标状态
检查进程的自动启动设置,如果它设置为自动,并且您的监控程序刚刚启动,则延迟报告该服务未运行(假设它可能很快就会启动)。
答案 1 :(得分:1)
您可能同时需要QueryServiceConfig
和QueryServiceConfig2()
。获取SERVICE_CONFIG_DELAYED_AUTO_START_INFO
数据需要第二次调用。