Windows服务的默认关机顺序

时间:2016-03-23 17:38:09

标签: windows service

虽然我可以找到有关Windows服务如何以基于服务组和基于标签的服务组内的顺序启动的文章,但我无法获得有关Windows服务的默认关闭顺序的信息。

如果我们没有指定“PreshutdownOrder”来改变关闭顺序,我们可以假设Windows服务会以与它们启动顺序相反的顺序关闭吗?如果不是那么为什么会这样,关闭顺序是如何确定的?如果是,那么请您指出最好来自Microsoft的相关文档吗?

我问的是这个问题,因为我的机器上有一个属于服务组的应用程序白名单服务(比如A)和一些不属于任何服务组的服务(比如说B和C)。出于系统安全原因,我希望确保白名单服务A在其他服务启动之前启动,并在其他服务关闭后关闭。

1 个答案:

答案 0 :(得分:1)

来自MSDN上的Service Control Handler Function

  

完成预关闭通知后,所有使用SERVICE_ACCEPT_SHUTDOWN控制代码调用SetServiceStatus的控制处理程序都会收到SERVICE_CONTROL_SHUTDOWN控制代码。它们按照它们出现在已安装服务的数据库中的顺序得到通知。

我认为结果是服务通知的顺序是不可预测的。当然,服务没有必要按照通知的顺序停止;在通知下一个服务之前,系统不会等待每个服务停止。

根据您的描述,在您的方案中,最佳选择可能是服务A在系统关闭期间继续运行。任何未注册关闭通知的服务都会保持运行,直到系统实际关闭或重新启动为止。

但是,如果必须通知服务A系统正在关闭(例如,它可能需要干净地关闭数据库文件),那么它在等待所有依赖服务停止时可以返回STOP_PENDING