2009-12-03 100 views
1

我正在爲現有產品編寫一個安裝程序,早期的安裝程序是在NSIS(Nullsoft腳本安裝系統)中編寫的。我必須使用WiX爲此產品編寫基於msi的安裝程序。我對此有一些疑問: -使用WiX編寫可升級的msi軟件包

  1. 如何檢測我的應用程序是否安裝在目標機器上?應用程序可能已經使用NSIS(舊版本)或MSI(現在開始)安裝。
  2. 如何編寫WiX安裝程序,如果目標機器上安裝了較舊/相同版本的產品,則可以升級該安裝程序。我在幾個網站上發現了這個主題,但所有這些都不起作用。具體而言,我想知道哪些信息(GUID,版本等)需要在每個軟件版本的安裝程序代碼中進行更改。
  3. 我們產品的三/四個版本每年發佈一次。什麼樣的安裝程序最適合我?

請注意,如果我只是在Wix代碼中更改產品元素的版本,則較新的安裝程序無法替換較舊的安裝程序。當我雙擊安裝程序的較新版本時,它會顯示一個錯誤對話框說明

此產品的其他版本已安裝。此版本的安裝不能continue.To配置或刪除這個產品的現有版本,使用添加/刪除控制面板上的程序」

示例代碼:

<?xml version='1.0' encoding='windows-1252'?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" > 
    <Product Name='Baton' Id='41B8F929-B6CF-41BE-9E40-C96D9BD6D672' 
     UpgradeCode='E1F03FA4-D470-4FA6-86BA-F5CDD3007C1D' 
     Language='1033' Codepage='1252' Version='1.0.0' Manufacturer='Company Name.'> 

     <Package Id='*' Keywords='Installer' Description="product Installer" 
      Comments='product comments' 
      InstallerVersion='100' Languages='1033' Compressed='yes' 
      SummaryCodepage='1252' /> 

     <Upgrade Id='E1F03FA4-D470-4FA6-86BA-F5CDD3007C1D'> 
      <UpgradeVersion OnlyDetect='no' Property='PREVIOUSFOUND' Minimum='1.0.0' 
       IncludeMinimum='yes' Maximum='1.1.0' IncludeMaximum='yes' /> 
     </Upgrade> 

     <!-- ***Install execution sequence*** --> 
     <InstallExecuteSequence> 
      <RemoveExistingProducts After="InstallInitialize"/> 
+0

我建議你下次專注於一個特定的問題。爲3個或4個半相關問題的集合編寫一個連貫的答案是很困難的。我剛剛回答(我認爲是)主要問題。 – 2009-12-04 00:30:26

回答

2

另一個版本的本產品已安裝 安裝 此版本無法繼續至 配置或刪除此產品的現有 版本,使用 控制面板上的添加/刪除程序

這是您在使用完全相同的產品ID重建安裝程序並重新運行時得到的錯誤。爲避免這種情況,請將產品元素ID設置爲Id="*"

重大升級可以在this answer執行。它與您的示例代碼大致相同,只是它使用預處理器變量來保持Product元素和UpgradeVersion元素之間的版本一致。它也可以防止降級。