将服务配置为延迟自动启动(以及 XP/2003 上的自动启动)

Aja*_*jay 4 windows-installer wix

我有一个 WiX 脚本,可以安装服务。我ServiceInstallComponent.

<ServiceInstall Id="ServiceInstaller" Type="ownProcess" Vital="yes"
                Name="abc" DisplayName="abc service"
                Description="It does this" Start="auto"
                Account="LocalSystem" ErrorControl="normal" Interactive="no">
  <ServiceConfig DelayedAutoStart="yes" OnInstall="yes" OnReinstall ="yes" />
</ServiceInstall>
Run Code Online (Sandbox Code Playgroud)

从代码中可以看出,我使用ServiceConfigwithDelayedAutoStart标志将服务设置为以延迟自动启动模式启动。但是 WiX 编译器 ( candle.exe) 会触发警告:

警告 CNDL1150:Windows 安装程序 SDK 中记录的 ServiceConfig 功能“未按预期 [工作]”。考虑用 WixUtilExtension ServiceConfig 元素替换 ServiceConfig。

因此,我尝试使用util:ServiceConfig^,但是此元素没有任何属性来控制服务启动。

^命名空间导入:

<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'
  xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 
Run Code Online (Sandbox Code Playgroud)

因此,问题很简单:

  1. 如何将服务启动设置为自动(延迟启动)?
  2. 如何有条件地仅在 Vista 及以上版本上执行,而在 Windows XP/2003 上执行正常(自动)?

Chr*_*all 6

检查来源后,目前似乎不可能。维克斯调用ChangeServiceConfig2功能只与SERVICE_CONFIG_FAILURE_ACTIONS参数,而不是用SERVICE_CONFIG_DELAYED_AUTO_START_INFO

如果我是你,我会sc config abc start=delayed-auto在 CMD 中编写一个自定义操作调用。

至于你的第二个问题,添加VersionNT版本条件(VersionNT >= 600适用于所有大于Vista的版本)

  • 那么理想情况下它不应该发出警告。 (2认同)
  • 感谢您投反对票@Dai。但是,OP 确实使用了 UtilExtension,并且您可以轻松地看到,candle.exe 在使用 ServiceConfig 时会触发警告,OP 也记录了这一点。我很高兴接受反对票,但也请友善地为 OP 问题提供更好的答案。 (2认同)