如何在 Windows XP 中安装具有延迟自动启动类型的服务



我的安装程序在Inno Setup中使用以下命令创建服务:

Filename: {sys}sc.exe; Check: IsAdminLoggedOn; Parameters: "create Example start= delayed-auto binPath= ""{app}Example.exe"""; Flags: runhidden

此行适用于除 Windows XP 以外的所有 Windows,因为 Windows XP 不支持delayed-auto启动类型。
我需要使用 delayed-auto 启动类型有两个原因。

  1. 我的服务需要始终在没有用户干预的情况下在后台运行,这意味着该服务必须在启动时自动启动。
  2. 我的服务依赖于其他基本的Windows服务,没有它们就无法运行,因此我使用delayed-auto仅在所有基本服务都启动后启动。

那么我可以在Windows XP上创建一个启动类型类似于delayed-auto的服务吗?如果不是,那么有什么替代方案呢?

delayed-auto启动类型不用于解析服务之间的依赖关系。如果您依赖的服务也具有delayed-auto启动类型怎么办?delayed-auto启动类型旨在通过延迟非基本服务来加快计算机启动速度。

请参阅"延迟启动"在 Windows 服务的启动类型中有什么作用?


若要设置服务之间的依赖关系,请使用depend=选项。

sc.exe create Example start= delayed-auto binPath= "..." depend= service1/service2/service3

如果您仍想在 Windows Vista 及更高版本上使用delayed-auto(推荐使用),只需创建两个[Run]条目,一个用于 Windows XP,一个用于 Windows Vista(Windows 版本 6.0)及更高版本。

; Delayed automatic start on Vista and newer
Filename: {sys}sc.exe; Check: IsAdminLoggedOn; 
    Parameters: "create Example start= delayed-auto binPath= ""{app}Example.exe"" depend= service1/service2/service3"; 
    Flags: runhidden; MinVersion: 6.0
; Automatic start on XP
Filename: {sys}sc.exe; Check: IsAdminLoggedOn; 
    Parameters: "create Example start= auto binPath= ""{app}Example.exe"" depend= service1/service2/service3"; 
    Flags: runhidden; OnlyBelowVersion: 6.0

另请参阅基于 Windows 版本的 Inno Setup Run 部分中执行不同的命令。


一个更好的解决方案,虽然稍微复杂一些,是使用脚本常量。它减少了代码重复。

尝试创建一个在系统启动时启动的计划任务。 计划任务可能取决于存在的网络连接。 您还可以(如果您不可用)使用命令行脚本对网络设备执行 ping 操作,并在启动您创建为"手动"启动的服务之前检查响应。 这应该可以避免由于资源不可用而导致崩溃。]<</p>