Windows sc 是否以任何方式订购查询?

Does Windows sc order queries in any fashion?

正在使用 NSIS 安装程序管理服务。卸载时,这些服务使用 net stop 停止,因为它是同步的,然后使用 sc delete 标记为删除,因为它们不必删除 immediately/synchronously.

现在我想知道安装过程。调用顺序是这样的:

  1. net stop service1
  2. net stop service2
  3. sc config service1 depend=dependency1
  4. sc config service2 depend=dependency2
  5. sc start service1
  6. sc start service2

传递给 sc 的查询是否有内在顺序?它们是否按照调用 sc 的顺序完成(我假设它们不是)?他们是否被委派给相应的服务并在那里排队(这是我所希望的),例如 service1service2 是否停止并首先配置是模棱两可的, 但 sc config, sc start 命令不是?顺序是否完全不明确?

此外,我很想知道混合 netsc 调用时会发生什么。假设顺序如下:

  1. net stop service
  2. sc config service
  3. net start service

假设服务可能会停止,然后在任何配置发生之前启动是否合理?

一般的问题应该是,如何通过串联的 sc/net 调用确保正确的服务设置。所需顺序:

  1. 停止服务(系统上可能存在也可能不存在)
  2. 创建服务/配置服务
  3. 开始服务

卸载不那么紧迫,因为停止服务并将其标记为删除就足够了。

混合 scnet 调用应该不是问题,因为控制服务的是 SCM(服务控制管理器)进程,其他应用程序只是要求 SCM 执行特定操作.

The documentation 对于 ChangeServiceConfig API 函数指出:

If the configuration is changed for a service that is running, with the exception of lpDisplayName, the changes do not take effect until the service is stopped.

这让我相信安装程序可以使用以下顺序:

Install/Configure --> 停止(同步)--> 开始。

执行 "Stop --> Configure --> Start" 总是会出现竞争条件问题,因为另一个进程可能会在错误的时间触发服务启动。