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

时间:2016-03-06 14:26:05

标签: service windows-services windows-xp inno-setup

我的安装程序使用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
  3. 那么我可以在Windows XP上创建一个类似于delayed-auto的启动类型的服务,如果没有,那么有哪些替代方案?

2 个答案:

答案 0 :(得分:6)

delayed-auto启动类型不是为了解决服务之间的依赖关系。如果您所依赖的服务也具有delayed-auto启动类型,该怎么办? delayed-auto启动类型旨在通过延迟非必要服务来加速计算机启动。

请参阅What does “delayed start” do in startup type for a Windows service?

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

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

如果您仍想在Windows Vista及更高版本(推荐使用)上使用delayed-auto,只需创建两个[Run]条目,一个用于Windows XP,另一个用于Windows Vista(Windows version 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

另见Execute different command in Inno Setup Run section based on Windows version

更好但是更复杂的解决方案是使用scripted constant。它减少了代码重复。

答案 1 :(得分:1)

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