Windows sc 是否以任何方式订购查询?
Does Windows sc order queries in any fashion?
正在使用 NSIS 安装程序管理服务。卸载时,这些服务使用 net stop
停止,因为它是同步的,然后使用 sc delete
标记为删除,因为它们不必删除 immediately/synchronously.
现在我想知道安装过程。调用顺序是这样的:
net stop service1
net stop service2
sc config service1 depend=dependency1
sc config service2 depend=dependency2
sc start service1
sc start service2
传递给 sc
的查询是否有内在顺序?它们是否按照调用 sc
的顺序完成(我假设它们不是)?他们是否被委派给相应的服务并在那里排队(这是我所希望的),例如 service1
或 service2
是否停止并首先配置是模棱两可的, 但 sc config
, sc start
命令不是?顺序是否完全不明确?
此外,我很想知道混合 net
和 sc
调用时会发生什么。假设顺序如下:
net stop service
sc config service
net start service
假设服务可能会停止,然后在任何配置发生之前启动是否合理?
一般的问题应该是,如何通过串联的 sc
/net
调用确保正确的服务设置。所需顺序:
- 停止服务(系统上可能存在也可能不存在)
- 创建服务/配置服务
- 开始服务
卸载不那么紧迫,因为停止服务并将其标记为删除就足够了。
混合 sc
和 net
调用应该不是问题,因为控制服务的是 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" 总是会出现竞争条件问题,因为另一个进程可能会在错误的时间触发服务启动。
正在使用 NSIS 安装程序管理服务。卸载时,这些服务使用 net stop
停止,因为它是同步的,然后使用 sc delete
标记为删除,因为它们不必删除 immediately/synchronously.
现在我想知道安装过程。调用顺序是这样的:
net stop service1
net stop service2
sc config service1 depend=dependency1
sc config service2 depend=dependency2
sc start service1
sc start service2
传递给 sc
的查询是否有内在顺序?它们是否按照调用 sc
的顺序完成(我假设它们不是)?他们是否被委派给相应的服务并在那里排队(这是我所希望的),例如 service1
或 service2
是否停止并首先配置是模棱两可的, 但 sc config
, sc start
命令不是?顺序是否完全不明确?
此外,我很想知道混合 net
和 sc
调用时会发生什么。假设顺序如下:
net stop service
sc config service
net start service
假设服务可能会停止,然后在任何配置发生之前启动是否合理?
一般的问题应该是,如何通过串联的 sc
/net
调用确保正确的服务设置。所需顺序:
- 停止服务(系统上可能存在也可能不存在)
- 创建服务/配置服务
- 开始服务
卸载不那么紧迫,因为停止服务并将其标记为删除就足够了。
混合 sc
和 net
调用应该不是问题,因为控制服务的是 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" 总是会出现竞争条件问题,因为另一个进程可能会在错误的时间触发服务启动。