服务控制管理器(SCM)对服务上的方法调用有什么保证?
是否可以保证不会出现以下情况?
到目前为止,我发现的最佳参考资料似乎表明这些保证确实已经完成,但我发现的文档中唯一的参考文献非常模糊,所以我试图找到更好的参考。
这是MSDN论坛上的一个thread,它说SCM确保状态一致或“至少我从未发现[SCM在服务未运行时发送停止请求的情况]或暂停]可能发生“。
这是迄今为止我在文档中找到的最佳参考:
这些方法[OnStart / OnStop / etc.]表示服务在其生命周期中经过的状态;服务从一个状态转换到下一个状态。例如,在调用OnStart之前,您永远不会让服务响应OnContinue命令。
答案 0 :(得分:0)
迈克尔·泰勒在引用Win32 API的MSDN论坛上提供了a good answer这个问题,该文件记录了SCM在响应无效控制代码时所做的工作(以各种方式拒绝它们)。
仅当SCM认为该服务时才调用状态更改方法 处于适当的状态并假设服务说它可以 处理状态(暂停/继续)。
- 如果服务停止,将调用OnStart。
- 如果服务正在运行,则会调用OnPause。
- OnContinue,如果服务暂停。
- 暂停服务只能恢复或停止。
- 正在运行的服务只能暂停或停止。
- SCM将命令序列化为服务 一次只能运行一个命令。
有关更多信息,请参阅有关服务工作方式的Win32 documentation。