服务控制管理器 (SCM) 对服务上的方法调用做出什么保证?
它是否保证不会出现以下情况?
- 服务停止时的 OnStart/OnPause/OnContinue
- 服务暂停时的 OnStart/OnPause
- 服务运行时 OnStop/OnContinue
- 在命令方法已被执行时调用的任何命令方法
- OnStart 而 OnStart 已经在执行
- OnPause 执行时的 OnStop
到目前为止,我发现的最佳参考似乎表明确实做出了这些保证,但我发现的文档中唯一的参考非常模糊,所以我试图找到更好的参考。
这是 MSDN 论坛上的一个帖子,它说 SCM 确保状态是一致的,或者“至少我从来没有发现 [如果服务未运行或暂停,SCM 发送停止请求] 可能发生的情况”。
这是迄今为止我在文档中找到的最佳参考:
这些方法 [OnStart/OnStop/etc.] 表示服务在其生命周期中经历的状态;服务从一种状态转换到另一种状态。例如,在调用 OnStart 之前,您永远不会让服务响应 OnContinue 命令。