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

Windows 阻止Wix在我的产品中安装所有功能?,windows,installation,wix,wix3.5,Windows,Installation,Wix,Wix3.5,安装MSP修补程序后,Windows Installer决定安装初始MSI中提供的所有功能。如何防止MSP修补程序安装所有可用功能 功能请求如下所示: Installed: Absent Request: local Action : local 为什么要求安装所有功能?您必须在初始安装时将所选功能保存到注册表,ADDLOCAL属性。安装修补程序时,它必须相应地从注册表设置ADDLOCAL属性读取状态 否则,修补程序会像选择默认值一样运行,因此会安装缺少的功能 对于升级案例,您链接到的,Mig

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

功能请求如下所示:

Installed: Absent
Request: local
Action : local

为什么要求安装所有功能?

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

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


对于升级案例,您链接到的,
MigrateFeatures
属性在修补程序中不起作用。

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

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


对于升级案例,您链接到的,
MigrateFeatures
属性在修补程序中不起作用。

我发现ADDLOCAL属性被设置为所有已卸载的功能。这导致了每一个都有一个“Request:local”。我解决这个问题的方法是使用一个小的自定义操作来删除这个属性。它需要在CostFinalize之前完成,因为需要在该操作之前定义要安装的功能。 变量REPLAY包含已安装的功能,所有这些功能都需要重新安装。因此,MSP补丁只重新安装已经安装的功能,而保留未安装的功能

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

编辑: 最后,这个解决方案对我的一个补丁有效,但对另一个补丁无效。因此,到目前为止,我实现的最终解决方案是在补丁期间设置REINSTALL=ALL。主张:

请注意,即使“重新安装”设置为“全部”,也仅重新安装以前已安装的功能。因此,如果为尚未安装的产品设置了“重新安装”,则根本不会执行任何安装操作


因此,我认为这是一个比删除
ADDLOCAL
属性更好的解决方案。这两个补丁都能使用。

我发现ADDLOCAL属性被设置为所有已卸载的功能。这导致了每一个都有一个“Request:local”。我解决这个问题的方法是使用一个小的自定义操作来删除这个属性。它需要在CostFinalize之前完成,因为需要在该操作之前定义要安装的功能。 变量REPLAY包含已安装的功能,所有这些功能都需要重新安装。因此,MSP补丁只重新安装已经安装的功能,而保留未安装的功能

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

编辑: 最后,这个解决方案对我的一个补丁有效,但对另一个补丁无效。因此,到目前为止,我实现的最终解决方案是在补丁期间设置REINSTALL=ALL。主张:

请注意,即使“重新安装”设置为“全部”,也仅重新安装以前已安装的功能。因此,如果为尚未安装的产品设置了“重新安装”,则根本不会执行任何安装操作


因此,我认为这是一个比删除
ADDLOCAL
属性更好的解决方案。而且它对这两个补丁都有效。

首先,感谢您的回答。我无法修改初始MSI,因为它是RTM版本。用户已经安装了这个MSi,所以我必须构建一个MSP补丁来应用一些小的更改。我认为没有必要在注册表中保存特性的状态。我还没有看到任何关于保存功能状态的帖子。我想一定有办法告诉MSP补丁忽略未安装的功能。首先,感谢您的回答。我无法修改初始MSI,因为它是RTM版本。用户已经安装了这个MSi,所以我必须构建一个MSP补丁来应用一些小的更改。我认为没有必要在注册表中保存特性的状态。我还没有看到任何关于保存功能状态的帖子。我想一定有办法告诉MSP补丁忽略未安装的功能。谢谢。我也有同样的问题。添加重新安装=所有工作都很有魅力!谢谢我也有同样的问题。添加重新安装=所有工作都很有魅力!