防止Wix在我的产品中安装所有功能?

时间:2012-09-05 19:53:40

标签: windows installer wix installation wix3.5

安装MSP补丁后,Windows Installer决定安装初始MSI中提供的所有功能。如何防止MSP补丁安装所有可用功能?

功能请求显示如下:

Installed: Absent
Request: local
Action : local

为什么要求安装所有?

2 个答案:

答案 0 :(得分:1)

我发现ADDLOCAL属性已设置为所有已卸载的功能。这导致每个人“请求:本地”。我为解决这个问题所做的是使用一个删除此属性的小型自定义操作。它需要在CostFinalize之前运行,因为需要在该操作之前定义要安装的功能。 变量REINSTALL保存已安装的功能,并且所有功能都要求重新安装。因此,MSP补丁仅重新安装已安装的功能,并保持未安装的功能不受影响。

<CustomAction Id="REMOVE_ADDLOCAL_PROPERTY"
       Property="ADDLOCAL" Value="[NonExistentProperty]"
/>
<InstallExecuteSequence>
    <Custom Action="REMOVE_ADDLOCAL_PROPERTY" Before="CostFinalize">
        <![CDATA[PATCH]]>
    </Custom>
</InstallExecuteSequence>

编辑: 最后,这个解决方案适用于我的一个补丁,但另一个失败了。所以我到目前为止实现的最终解决方案是在补丁期间设置REINSTALL = ALL。This MSDN link代表:

  

请注意,即使将REINSTALL设置为ALL,也只会重新安装之前已安装的功能。因此,如果为尚未安装的产品设置了REINSTALL,则根本不会执行任何安装操作。

所以我认为这是一个比删除ADDLOCAL属性更好的解决方案。它也适用于两个补丁。

答案 1 :(得分:0)

初始安装ADDLOCAL属性时,必须将所选功能保存到注册表中。安装补丁时,必须相应地从注册表设置ADDLOCAL属性中读取状态。

否则,补丁会像选择默认值一样运行,因此会安装缺少的功能。

您链接到a question升级案例,MigrateFeatures属性(引用MigrateFeatureStates action)在补丁的情况下不起作用。