Wix Installer:控制自定义脚本仅在指定安装/升级/卸载场景执行一次
Wix Installer 自定义脚本执行条件修正方案
你当前的配置在升级场景下会触发两次脚本,问题出在新版本安装阶段Not Installed AND NOT UPGRADINGPRODUCTCODE条件会成立,导致重复执行。需要调整条件逻辑,借助OLDPRODUCTS属性区分全新安装和升级流程里的新版本安装环节。
修改后的配置如下:
<InstallExecuteSequence> <!-- 脚本仅在全新安装、非升级卸载、升级时旧版本卸载阶段执行 --> <Custom Action='BackupPreviousVersionAction' After="InstallInitialize"> (Not Installed AND NOT OLDPRODUCTS) OR (Installed AND REMOVE~="ALL") </Custom> </InstallExecuteSequence>
条件逻辑说明
(Not Installed AND NOT OLDPRODUCTS):匹配全新安装场景,此时系统无已安装版本,也不存在待升级的旧产品,脚本执行1次。(Installed AND REMOVE~="ALL"):覆盖两种场景:- 非升级的完全卸载:系统存在已安装版本,且执行完全卸载操作,脚本执行1次。
- 升级时的旧版本卸载阶段:升级流程中旧版本会被完全卸载,此条件成立,脚本执行1次;而新版本安装阶段,
Installed为假,Not Installed虽为真但OLDPRODUCTS存在,第一个条件不触发,因此不会重复执行。
场景验证
- 全新安装:脚本执行1次
- 常规卸载:脚本执行1次
- 版本升级:仅在旧版本卸载阶段执行1次,新版本安装阶段不执行
内容的提问来源于stack exchange,提问作者Gilad Dahan
相关产品推荐
相关产品推荐

