我有一套WiX脚本,用于允许我为补丁创建补丁。我有充分的安装以下版本号:WiX:从WiX 3.0升级到WiX后修补补丁不再有效3.6-8
11.00.38.01 11.00.38.02 11.00.38.03
我会那么这些数字之间创建补丁,即
11.00.38.01-11.00。 38.02 11.00.38.02-11.00.38.03
使用这些脚本WiX的3.0,我将能够运行
11.00.38.01
,然后应用
11.00.38.01-11.00.38.02和11.00.38.02-11.00.38.03补丁,
这将使安装多达
11.00.38.03
升级到WiX 3.6及更高版本3.7和3.8后,此功能不再有效。
我可以安装一个构建并将一个修补程序应用于该构建,但无法安装构建,修补安装,然后应用其他修补程序。
如果我试图做到这一点,我得到以下错误:
The upgrade patch cannot be installed by the Windows Installer service because the program to be upgraded may be missing, or the upgrade patch may update a different version of the program. Verify that the program to be upgraded exists on your computer and that you have the correct upgrade patch.
我的贴片模板看起来是这样的:
该产品的.wxs脚本<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Patch
AllowRemoval="no"
Manufacturer="Acme"
MoreInfoURL="http://www.acme.com/"
DisplayName="$(var.ProductName) $(var.ProductVersion) Upgrade"
Description="Minor Upgrade"
Classification="Update"
>
<Media Id="5000" Cabinet="RTM.cab">
<PatchBaseline Id="RTM"/>
</Media>
<PatchFamilyRef Id="$(var.ProductShortName)UpgradeFamily"/>
</Patch>
<Fragment>
<PatchFamily Id='$(var.ProductShortName)UpgradeFamily' Version='1.0.0.0' Supersede='yes'>
<ComponentGroupRef Id='PatchComponents' />
</PatchFamily>
</Fragment>
</Wix>
部分看起来是这样的:
<Product Name='Acme Server'
Id='6DE00366-36D8-4BA0-B911-8FBD7490C472'
UpgradeCode='0FDE99AC-D910-46CF-814D-D851B81D3816'
Language='1033'
Codepage='1252'
Version='$(var.ProductVersion)'
Manufacturer='Acme'>
<Package
Id='*'
Keywords='Installer'
Description="Acme Server"
Comments='Acme Server is a registered trademark of Acme.'
Manufacturer='Acme'
InstallerVersion='200'
Languages='0'
Compressed='yes'
SummaryCodepage='1252'
Platform='x86'
/>
<Upgrade Id='0FDE99AC-D910-46CF-814D-D851B81D3816'>
<UpgradeVersion OnlyDetect='yes' Property='SELFFOUND'
Minimum='$(var.ProductVersion)' IncludeMinimum='yes' Maximum='$(var.ProductVersion)' IncludeMaximum='yes' />
<UpgradeVersion OnlyDetect='yes' Property='NEWERFOUND'
Minimum='$(var.ProductVersion)' IncludeMinimum='no' />
</Upgrade>
</Product>
有趣的是,WiX 3.0补丁日志包含以下行:
PATCH SEQUENCER: verifying the applicability of minor upgrade patch c:\Install\10.10.11.01-10.10.11.02\AcmeServer.msp against product code: {6DE00366-36D8-4BA0-B911-8FBD7490C472}, product version: 10.10.1101, product language 1033 and upgrade code: {0FDE99AC-D910-46CF-814D-D851B81D3816}
而维克斯3.6或更高版本的补丁日志包含这一行:
PATCH SEQUENCER: verifying the applicability of QFE patch c:\11.00.38.01-11.00.38.02\AcmeServer.msp against product code: {6DE00366-36D8-4BA0-B911-8FBD7490C472}, product version: 11.00.3801, product language 1033 and upgrade code: {0FDE99AC-D910-46CF-814D-D851B81D3816}
注意,3.0日志说:“小升级补丁”,而3.6+日志说:“QFE补丁”。我不知道这是否与此有关。
我在这里做错了什么?为什么生成的修补程序的行为会发生变化?当然,在过去的几年里对WiX脚本进行了一些微调,但据我所知,其中没有一个与修补过程有关。似乎主要变化是由于从WiX 3.0切换到更新版本。
编辑:
我已经验证了这种变化正好发生在我切换从维克斯3.0至3.6维克斯的时间。
我也注意到,如果我使用WiX 3。0生成的补丁,版本号被在程序更新&特点当贴剂被施加到完全安装或另一补丁而用维克斯3.6 + - 生成补丁,当贴剂被施加到版本号保持不变完整的安装。
我想知道如果任何违约已经改变了命令行工具(火炬,烟火等)?
我的猜测是,它是与PackageCodes。 QFE和次要升级之间的区别在于PackageCode是否发生了变化。另一个线索是,已安装产品的身份(产品代码+ PackageCode)以及斑片有一个目标packagecode它不能在系统上找到。所以一些补丁组合已经改变了产品的包装码,有些还没有。 – PhilDW
使用WiX 3.0生成的修补程序将更新程序和特征中的版本号。如果由WiX 3.6+生成,则版本号不会更新(尽管在这两种情况下都会更新文件)。 –