我使用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但两者都不起作用。
答案 0 :(得分:1)
我有同样的问题,Validate/@ProductId='no'
对我来说似乎没什么用,除非我做错了。
我发现您需要为每次更新保持ProductId
相同,并且仅在主要版本升级时更改它(此时没有MSP从v1.x转到v2 .0,它是通过MSI进行的升级安装。
然后,您可以基于v1.0构建MSP并将ProductVersionOperator
设置为GreaterOrEqual
,或者基于v1.1构建它并将其设置为LesserOrEqual
,并且MSP将会适用于任何v1.x MSI。