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

为何WiX报ICE64错误提示dirStartMenuFolder未列入RemoveFile表?

报错原因

ICE64是Windows Installer的内置验证规则,用于检测用户配置文件路径下的目录是否会在卸载时残留。你虽然已经添加了<RemoveFolder>配置,但触发报错通常是以下两个原因:

  1. <RemoveFolder>默认仅能删除空目录,规则判定该目录卸载时可能存在其他遗留文件,无法保证被成功移除
  2. 你的当前组件KeyPath为HKCU路径,如果安装包配置为每台机器级安装,会出现组件作用域和目录作用域不匹配的问题,验证规则无法确认卸载时<RemoveFolder>一定会执行

解决方法

方案1(推荐,适配所有场景)

在你现有的cMyShortcut组件中新增<RemoveFile>配置,卸载时先清空目录下所有内容,再删除目录即可通过验证,修改后的组件代码如下:

<Component Id="cMyShortcut" Guid="my-guid">
    <Shortcut Id="shMyShortcut"
            Name="MyApp" 
            Description="My Great App"
            Target="[#fMyApp]" WorkingDirectory="dirIniFolder" />
    <!-- 新增以下行,清空目录下所有文件 -->
    <RemoveFile Id="rmStartMenuAllFiles" Name="*.*" On="uninstall" />
    <RegistryValue Root="HKCU" Key="Software\$(var.Manufacturer)\$(var.ProductName)" Name="InstalledMyShortcut" Type="integer" Value="1" KeyPath="yes" />
    <RemoveFolder Id="rmStartMenuFolder" Directory="dirStartMenuFolder" On="uninstall" />
</Component>

如果你的安装包是每台机器级安装(即ALLUSERS=1),请将<RegistryValue>的Root属性修改为HKLM,保证组件作用域匹配。

方案2(临时跳过验证,不推荐生产环境使用)

如果确认目录不会有残留,你可以在Light.exe的编译参数中添加-swice64,直接屏蔽ICE64验证规则即可消除报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:04