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

如何让Wix Toolset忽略指定文件夹以避免MSI自修复循环

解决Wix安装中MSI因删除目录触发自修复的问题

核心思路是让Windows Installer(MSI)完全不追踪这个会被删除的FirstRun目录,从根源上避免触发自修复。具体操作如下:

  • 直接从Wix的目录结构声明中移除DELETEMEAFTERFIRSTRUN目录的定义,不要让它关联到任何带GUID的组件。因为MSI会通过组件的KeyPath检测资源完整性,只要目录被纳入组件管理,删除后就会触发修复。
  • 改为由主应用在首次运行时自行创建该目录。这样MSI完全不知道这个目录的存在,后续删除操作也不会触发自修复逻辑。

修改后的Wix代码片段:

<StandardDirectory Id="CommonAppDataFolder">
<Directory Id="OurCommon" Name="!(bind.property.ShortManufacturer)">
    <Directory Id="OurAppData" Name="OurAppData">
        <Component Id="CommonFolderPermissions" Guid="{GUID HERE}">
            <CreateFolder>
                <util:PermissionEx User="Everyone" GenericAll="yes" CreateFile="yes" DeleteChild="yes" />
            </CreateFolder>
        </Component>
        <!-- 移除会被删除的FirstRun目录声明,由主应用首次运行时创建 -->
    </Directory>
</Directory>
</StandardDirectory>

如果必须在安装阶段创建这个目录,不要用Wix的目录组件,而是用**自定义动作(Custom Action)**来创建。自定义动作生成的资源不会被MSI纳入组件追踪体系,后续删除也不会触发修复。

另外要确保父目录OurAppData的权限足够,让主应用能顺利创建和删除子目录,你当前的CommonFolderPermissions组件已经设置了Everyone的全权限,这部分可以保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:52:37