2014-07-01 27 views
0

我有一套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 + - 生成补丁,当贴剂被施加到版本号保持不变完整的安装。

我想知道如果任何违约已经改变了命令行工具(火炬,烟火等)?

+0

我的猜测是,它是与PackageCodes。 QFE和次要升级之间的区别在于PackageCode是否发生了变化。另一个线索是,已安装产品的身份(产品代码+ PackageCode)以及斑片有一个目标packagecode它不能在系统上找到。所以一些补丁组合已经改变了产品的包装码,有些还没有。 – PhilDW

+0

使用WiX 3.0生成的修补程序将更新程序和特征中的版本号。如果由WiX 3.6+生成,则版本号不会更新(尽管在这两种情况下都会更新文件)。 –

回答

0

的解决方案是一个的ProductVersion属性引用添加到PatchFamily元件如以下代码段:

<Fragment> 
    <PatchFamily Id='$(var.ProductShortName)UpgradeFamily' Version='1.0.0.0' Supersede='yes'> 
     <PropertyRef Id="ProductVersion"/> 
     <ComponentGroupRef Id='PatchComponents' /> 
    </PatchFamily> 
</Fragment> 

这是所有有给它。

我不认为这在任何文档或网页上找到平时,老样本补丁脚本中所提到的,虽然现在我知道要寻找什么,这是很容易找到关于它的讨论。

正如我在我原来的问题提到的,这个元素是没有必要使用WiX的3.0时可能会在一定程度上解释了它的缺席从旧补丁样品。