如何使用不同的产品代码在WiX中创建修补程序

时间:2017-11-08 15:46:34

标签: wix windows-installer patch

我使用Purely WiX approach to making patches并试图让一个MSP适用于2个不同的MSI。 我有v1.1 MSI和v1.2 MSI,并计划使用v1.2 MSI创建一个MSP,以便MSP可用于v1.1和v1.2。

我设置了Validate/@ProductId='no',其描述如下:

  

要求已安装的ProductCode与目标ProductCode匹配   用于创建变换。默认值为“是”。

但是,它仅适用于v1.2。到目前为止,我能够工作的唯一方法是添加2 TargetProductCode/@Id,如下所示。 这是Validate/@ProductId的错误吗?或者这是正确的方法吗?

<Media Id="5000" Cabinet="RTM.cab" >
    <PatchBaseline Id="RTM" >
        <Validate ProductId='no' ProductLanguage='no' ProductVersion="Update" ProductVersionOperator='LesserOrEqual' UpgradeCode='no' />
    </PatchBaseline>
</Media>

<!-- Why do I need this when Validate/@ProductId='no'? -->
<TargetProductCodes Replace='no'>
    <TargetProductCode Id='{xxx}' />
    <TargetProductCode Id='{xxx}' />
</TargetProductCodes>

<PatchFamilyRef Id="myRollup"/>

a same question但两者都不起作用。

1 个答案:

答案 0 :(得分:1)

我有同样的问题,Validate/@ProductId='no'对我来说似乎没什么用,除非我做错了。

我发现您需要为每次更新保持ProductId相同,并且仅在主要版本升级时更改它(此时没有MSP从v1.x转到v2 .0,它是通过MSI进行的升级安装。

然后,您可以基于v1.0构建MSP并将ProductVersionOperator设置为GreaterOrEqual,或者基于v1.1构建它并将其设置为LesserOrEqual,并且MSP将会适用于任何v1.x MSI。