You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过WiX配置Windows服务恢复选项及解决权限问题

WiX服务恢复配置问题解答

1. WiX的ServiceInstall能否直接配置服务恢复选项?

不能。Windows Installer原生的ServiceInstall表没有提供配置服务恢复选项的字段,WiX的ServiceInstall组件也没有对应的属性支持直接设置恢复策略,必须通过自定义动作调用系统工具实现。

2. 通过sc.exe设置服务恢复选项的实现方式

需要创建WiX自定义动作,调用系统自带的sc.exe执行failure命令,核心命令格式如下:

sc failure [服务名] reset= [重置时间(秒)] actions= [动作/延迟时间,...]

关键要确保自定义动作在系统上下文下执行,拥有修改服务配置的管理员权限。

3. 自定义动作代码的放置位置

你提供的自定义动作代码必须放在<Package>节点内部,与<Feature>、<InstallExecuteSequence>等节点同级。同时要修正两个关键问题:

  • Directory属性要匹配包中实际存在的目录ID(你的包中是INSTALLFOLDER_,不是INSTALLFOLDER)
  • 执行时机和权限参数要设置正确

修正后的代码示例(可放在DirectoryRef节点之后、Feature节点之前):

<CustomAction Id="SetRecoveryOptions"
              Directory="INSTALLFOLDER_"
              Execute="deferred"
              Impersonate="no"
              ExeCommand="[SystemFolder]sc.exe failure MyWindowsService reset= 0 actions= restart/60000/restart/60000/restart/60000"
              Return="ignore" />

<InstallExecuteSequence>
    <Custom Action="SetRecoveryOptions" After="InstallServices" />
</InstallExecuteSequence>

4. 确保自定义动作以管理员权限执行

当前代码仅在管理员命令行有效,核心问题及修正方案如下:

  1. 修改执行上下文:Execute="immediate"是用户上下文,无法获取系统级权限,必须改为Execute="deferred",让动作在系统上下文运行。
  2. 声明包的权限要求:在<Package>节点添加InstallPrivileges="elevated"和InstallScope="perMachine",确保安装程序启动时自动请求管理员权限。
  3. 修正服务名拼写错误:你的ServiceControl节点中服务名拼写为MyWIndowsServices,与ServiceInstall的MyWindowsService不一致,需统一避免服务启停失败。

完整修正后的包关键部分

<Package Name="$(Name)"
         Manufacturer="$(Manufacturer)"
         Version="$(Version)"
         UpgradeCode="$(var.UpgradeCode)"
         Compressed="true"
         InstallPrivileges="elevated"
         InstallScope="perMachine">

    <!-- 其他原有节点保持不变 -->

    <CustomAction Id="SetRecoveryOptions"
                  Directory="INSTALLFOLDER_"
                  Execute="deferred"
                  Impersonate="no"
                  ExeCommand="[SystemFolder]sc.exe failure MyWindowsService reset= 0 actions= restart/60000/restart/60000/restart/60000"
                  Return="ignore" />

    <InstallExecuteSequence>
        <Custom Action="SetRecoveryOptions" After="InstallServices" />
    </InstallExecuteSequence>

    <!-- Feature节点保持不变 -->
</Package>

内容的提问来源于stack exchange,提问作者Duncan Groenewald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 05:53:09