Wix v3.11安装器改可选功能为全装后升级异常求助
Wix v3.11升级时未自动安装所有功能的问题排查
问题根源
MSI的升级逻辑默认会继承现有安装的功能状态——哪怕你在新安装包中将所有Feature的Level设为1,升级过程中也只会对用户之前已安装的功能执行升级操作,不会主动启用之前未安装的功能。这是MSI的原生行为,用于保留用户最初的安装选择,但不符合你现在“强制安装所有功能”的需求。
解决办法
方法1:在Bundle中强制传递ADDLOCAL=ALL参数
修改<MsiPackage>节点,添加MsiProperty属性,强制所有功能安装:
<MsiPackage DisplayInternalUI="no" EnableFeatureSelection="no" MsiProperty="ADDLOCAL=ALL" />
这个参数会告诉MSI在安装(包括升级)过程中,强制安装所有标记为可安装的功能。
方法2:在Product中通过自定义动作重置升级时的功能状态
在<Product>节点下添加自定义动作,当检测到升级操作时,自动设置ADDLOCAL=ALL:
<Product ...> <!-- 其他配置 --> <InstallExecuteSequence> <SetProperty Id="ADDLOCAL" Value="ALL" Before="InstallInitialize"> Installed AND NOT REMOVE~="ALL" </SetProperty> </InstallExecuteSequence> </Product>
- 条件
Installed AND NOT REMOVE~="ALL"用于判断当前操作是升级(已安装产品且不是执行卸载)。 - 该动作会在安装初始化前强制设置
ADDLOCAL为ALL,覆盖MSI默认的功能状态继承行为。
补充验证
如果是大升级(Major Upgrade),确保<MajorUpgrade>元素的配置没有限制功能安装:
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." AllowDowngrades="no" Disallow="no" />
无需设置MigrateFeatures="yes"(该属性用于保留旧版本的功能状态,与当前需求冲突)。
内容的提问来源于stack exchange,提问作者Kim
相关产品推荐
相关产品推荐

