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

Wix安装包卸载时如何自动删除所有按条件安装的货币功能组件

问题根源

你遇到的卸载两次的问题核心原因是:CURRENCY是仅安装时传入的临时属性,卸载流程不会自动保留该属性值,导致卸载时两个区域设置Feature的Level始终为默认值0,MSI判定这两个Feature未被安装,不会处理对应组件的删除,产生残留后就需要第二次卸载才能清理干净。

解决方案

方案1:修改Feature条件适配卸载场景(最简便)

直接修改每个区域Feature的安装条件,增加卸载场景的判断,全量卸载时强制将Feature Level设为1,让MSI统一处理组件删除:
把原来的条件:

<Condition Level="1">CURRENCY = "GBP"</Condition>

修改为:

<Condition Level="1">CURRENCY = "GBP" OR REMOVE ~= "ALL"</Condition>

同理US区域的条件修改为:

<Condition Level="1">CURRENCY = "USD" OR REMOVE ~= "ALL"</Condition>

其中REMOVE ~= "ALL"是MSI内置的全量卸载状态判断,~=代表不区分大小写匹配,卸载时该条件成立,对应Feature会被纳入删除流程。

方案2:持久化CURRENCY属性(适合后续逻辑需要复用该属性的场景)

将安装时传入的CURRENCY值写入注册表,卸载时自动读取,不需要修改原有Feature条件:

  1. 首先定义持久化属性和注册表搜索逻辑:
<!-- 卸载时自动读取注册表中存储的CURRENCY值 -->
<Property Id="CURRENCY" Secure="yes">
  <RegistrySearch Id="SearchCurrency" Root="HKLM" Key="SOFTWARE\你的公司名\你的产品名" Name="Currency" Type="raw" />
</Property>

<!-- 安装时写入CURRENCY到注册表 -->
<Component Id="RegCurrency" Guid="替换为你生成的唯一GUID" KeyPath="yes">
  <RegistryValue Root="HKLM" Key="SOFTWARE\你的公司名\你的产品名" Name="Currency" Type="string" Value="[CURRENCY]" />
</Component>
  1. 将上述RegCurrency组件添加到主Feature的ComponentRef列表中,随主程序一起安装即可。

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

相关产品推荐
方舟 Agent Plan

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

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