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

Wix 3.11中WixRemoveFoldersEx安装误触发报0x80070057错误咨询

错误触发原因

这是WiX 3.x版本的固有设计导致的问题:

  • util扩展的RemoveFolderEx对应的WixRemoveFoldersEx自定义动作,默认会被插入到安装执行序列的CostInitialize阶段前运行,和你配置的On="uninstall"属性无关。On属性仅控制最终是否执行删除逻辑,不控制自定义动作本身的触发时机。
  • 你遇到的0x80070057报错,是因为CostInitialize是MSI成本计算的起始阶段,安装路径属性APPLICATIONFOLDER要到这个阶段及之后才会完成赋值,提前运行的WixRemoveFoldersEx校验属性存在性时找不到对应值,就会抛出参数错误。
  • 日志里显示错误被转换为成功、无实际影响,是因为该自定义动作默认开启了出错继续标记,且On="uninstall"的限制生效,就算属性存在安装阶段也不会真的执行删除操作。
解决方案

你可以选择以下任意一种方式规避安装阶段报错:

  • 方案1:显式限制WixRemoveFoldersEx的执行时机,仅卸载时运行
    在你的Wix项目中添加如下配置,覆盖原自定义动作的执行条件:
    <CustomAction Id="WixRemoveFoldersEx" Condition="REMOVE~=ALL" />
    
    该条件代表仅全量卸载场景下才会触发这个自定义动作,安装、修复、升级等场景都不会运行,自然不会出现安装阶段的报错。
  • 方案2:提前给APPLICATIONFOLDER设置默认值
    在产品定义节点下提前给安装路径属性赋值,避免属性校验失败:
    <Property Id="APPLICATIONFOLDER" Value="[ProgramFilesFolder]\你的产品默认安装目录" />
    
    这种方案不需要修改自定义动作逻辑,仅通过提前赋值满足属性校验要求,且On="uninstall"的限制仍然生效,安装阶段不会执行删除操作。
  • 方案3:升级到WiX 4.x版本,该版本已经优化了RemoveFolderEx的触发逻辑,只会在你指定的卸载阶段运行相关动作,不会在安装阶段提前触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:15:04