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

WiX构建MSI卸载触发upgrade-conf.exe报1603错误的解决咨询

问题分析

当前自定义操作仅指定了执行顺序为After="InstallFiles",未添加执行条件,导致卸载流程中该操作仍会被触发。而卸载时upgrade-conf.exe已被MSI删除,执行时会因找不到文件抛出0x80070002(文件不存在)错误,最终引发1603安装失败码。

解决方案

给自定义操作添加执行条件,限制其仅在安装(含首次安装、升级)阶段运行,卸载时直接跳过。核心是利用MSI内置属性控制执行时机:

  • REMOVE="ALL":标识当前正执行完整卸载流程
  • NOT REMOVE="ALL":排除卸载场景,仅在安装/升级时执行
修改后的代码示例

只需在InstallExecuteSequence的Custom元素中添加Condition属性:

<SetProperty Id="PostInstallUpgrade"
             Before="PostInstallUpgrade"
             Sequence="execute"
             Value ="&quot;[RMS_SERVICE]upgrade-conf.exe&quot;" />
<CustomAction Id="PostInstallUpgrade"
              BinaryKey="WixCA"
              DllEntry="WixQuietExec64"
              Execute="deferred"
              Return="check"
              Impersonate="no" />
<InstallExecuteSequence>
  <!-- 添加Condition属性,排除卸载场景 -->
  <Custom Action="PostInstallUpgrade" After="InstallFiles">NOT REMOVE="ALL"</Custom>
</InstallExecuteSequence>

如果需要在产品升级时也执行该配置升级操作,可将条件调整为:

<Custom Action="PostInstallUpgrade" After="InstallFiles">(NOT Installed) OR (UPGRADINGPRODUCTCODE)</Custom>
  • NOT Installed:首次安装时执行
  • UPGRADINGPRODUCTCODE:产品被升级(如Major Upgrade)时执行
验证效果

修改后重新编译MSI:

  • 首次安装:正常执行upgrade-conf.exe
  • 卸载:自定义操作被跳过,无报错
  • 升级(若配置对应条件):正常执行配置升级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:23:05