【问题标题】:Preventing Wix from installing All Features in my Product?阻止 Wix 在我的产品中安装所有功能?
【发布时间】:2012-09-05 19:53:39
【问题描述】:

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

功能请求显示如下:

Installed: Absent
Request: local
Action : local

为什么要求全部安装?

【问题讨论】:

    标签: windows installation wix wix3.5


    【解决方案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 属性更好的解决方案。它也适用于两个补丁。

    【讨论】:

    • 谢谢。我有同样的问题。添加 REINSTALL=ALL 就像魅力一样!
    【解决方案2】:

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

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

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

    【讨论】:

    • 首先,感谢您的回答。我无法修改初始 MSI,因为它是 RTM 版本。用户已经安装了这个 MSi,所以我必须构建一个 MSP 补丁来应用一些小的更改。我认为没有必要将功能状态保存在注册表中。我还没有看到任何关于保存功能状态的帖子。我认为一定有办法告诉 MSP 补丁忽略未安装的功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多