2014-07-01 161 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時可能會在一定程度上解釋了它的缺席從舊補丁樣品。