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

Wix V4自定义操作条件问题:仅卸载执行,更新时不触发

如何让Wix自定义操作仅在主动卸载时执行,升级时不触发

问题背景

需要让自定义操作DOSTUFF仅在用户通过控制面板「应用和功能」主动卸载产品时执行,版本升级(如1.0.0→1.0.1)时不触发。当前已定义UpgradeVersion检测旧版本,但原条件(REMOVE="ALL") And (NOT PREVIOUSFOUND)在升级时仍会触发操作,添加PREVIOUSFOUND的Secure属性也无效。

核心原因

原条件失效的关键在于:升级时旧产品的卸载会话中并不存在PREVIOUSFOUND属性——这个属性是新产品安装时检测到旧版本才会设置的,旧产品自身卸载时无法读取到该值,导致NOT PREVIOUSFOUND始终为真,结合REMOVE="ALL"就触发了操作。

解决方案

改用Windows Installer原生提供的UPGRADINGPRODUCTCODE属性来区分场景:该属性仅在旧产品被新版本升级卸载时会被自动设置(值为新产品的ProductCode),用户主动卸载时此属性不存在。

修正后的自定义操作条件如下:

<Custom Action="DOSTUFF" Before="RemoveFiles" Condition='REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE'/>

条件说明

  • REMOVE="ALL":确保当前是完全卸载流程(排除修改、修复等其他安装动作)
  • NOT UPGRADINGPRODUCTCODE:排除旧产品被升级卸载的场景,仅保留用户主动触发的卸载操作

你的UpgradeVersion定义无需修改,保持原样即可:

<UpgradeVersion OnlyDetect="no" Property="PREVIOUSFOUND"
                Minimum="1.0.0" IncludeMinimum="yes"
                Maximum="$(var.Version)" IncludeMaximum="no"/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:05:20