Windows sc是否以任何方式订购查询?
正在使用NSIS安装程序管理服务。卸载时,这些服务将使用Windows sc是否以任何方式订购查询?,windows,service,scripting,nsis,Windows,Service,Scripting,Nsis,正在使用NSIS安装程序管理服务。卸载时,这些服务将使用net stop停止,因为它是同步的,然后使用sc delete标记为删除,因为它们不必立即/同步删除 现在我想知道安装过程。通话顺序如下: 净停止服务1 净停止服务2 sc-config-service1 dependency=dependency1 sc配置服务2 dependency=dependency2 sc启动服务1 sc启动服务2 传递给sc的查询是否有内在顺序?它们是否按照调用的顺序完成了sc(我假设不是)?他们是否被委派到
net stop
停止,因为它是同步的,然后使用sc delete
标记为删除,因为它们不必立即/同步删除
现在我想知道安装过程。通话顺序如下:
净停止服务1
净停止服务2
sc-config-service1 dependency=dependency1
sc配置服务2 dependency=dependency2
sc启动服务1
sc启动服务2
sc
的查询是否有内在顺序?它们是否按照调用的顺序完成了sc
(我假设不是)?他们是否被委派到各自的服务并在那里排队(这是我所希望的),例如service1
或service2
是否先停止并配置是不明确的,但sc-config
,sc-start
顺序不明确?订单是否完全模棱两可
此外,我很想知道混合net
和sc
调用时会发生什么。假定以下顺序:
net-stop服务
sc配置服务
净启动服务
sc
/net
调用确保正确的服务设置。所需订单:
卸载不那么紧迫,因为停止服务并将其标记为删除就足够了。混合
sc
和net
调用不应该是问题,因为是SCM(服务控制管理器)进程控制服务,其他应用程序只要求SCM执行特定操作
对于ChangeServiceConfig
API函数,它声明:
如果为正在运行的服务更改了配置(lpDisplayName除外),则这些更改在服务停止之前不会生效
这使我相信安装程序可以使用以下顺序:
安装/配置-->停止(同步)-->启动
执行“停止-->配置-->启动”总是会出现争用条件问题,因为另一个进程可能会在错误的时间触发服务启动 我想这一切都取决于SCM是否一次处理多个查询。如果SCM保留处理Arriving查询的顺序,则stop->config->start和config->start->stop会产生相同的结果。否则,如果没有这样的保证,那么stop->config->start、not config->stop->start似乎都不能确保服务以更新的配置启动。嗯。不过,我还是想给你投票,因为这给了我一些见解。作为一个小的更新,我通过脚本运行了
net start
、net stop
和sc config
的各种顺序,有趣的是,到目前为止,每次都保持着顺序。启动和停止不是即时操作,内部有额外的状态,如启动和停止。“stop,config,start”可能变成“stop,start(由无关的第三方)、config,start”,然后新的配置就不受尊重了。在我的情况下,没有第三方,但我同意,config,stop-start显然是更安全的变体。谢谢NSIS wiki还有服务插件和宏,您可以使用它们来代替调用sc.exe。