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

yuv*_*val 3 service windows-xp windows-services inno-setup

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

Filename: {sys}\sc.exe; Check: IsAdminLoggedOn; Parameters: "create Example start= delayed-auto binPath= ""{app}\Example.exe"""; Flags: runhidden
Run Code Online (Sandbox Code Playgroud)

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

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

那么我可以在Windows XP上创建一个具有类似于启动类型的服务delayed-auto,如果没有,那么有哪些替代方案?

Mar*_*ryl 6

delayed-auto启动类型并非意在解决服务之间的依赖关系.如果您依赖的服务也具有delayed-auto启动类型怎么办?在delayed-auto启动类型旨在通过延迟非必要的服务,以加快计算机启动.

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


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

sc.exe create Example start= delayed-auto binPath= "..." depend= service1/service2/service3
Run Code Online (Sandbox Code Playgroud)

如果您仍想delayed-auto在Windows Vista及更高版本(建议使用)上使用,只需创建两个[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
Run Code Online (Sandbox Code Playgroud)

另请参阅基于Windows版本的Inno Setup Run部分中的Execute different命令.


一个更好但更复杂的解决方案是使用脚本常量.它减少了代码重复.