使用WiX编写可升级的msi软件包

时间:2009-12-03 14:12:07

标签: wix nsis

我正在为现有产品编写安装程序,早期的安装程序是在NSIS(Nullsoft Scriptable Install System)中编写的。我必须使用WiX为此产品编写基于msi的安装程序。我对此有一些疑问: -

  1. 如何检测我的应用程序是否已安装在目标计算机上?该应用程序可能已使用NSIS(旧版本)或MSI(现在开始)安装。
  2. 如果在目标计算机上安装了较旧/相同版本的产品,如何编写可以升级的WiX安装程序。我在几个网站上找到了这个主题,但所有这些都没有用。具体来说,我想知道在每个软件版本的安装程序代码中需要更改哪些信息(GUID,版本等)。
  3. 每年发布三/四个版本的产品。什么样的安装程序最适合我?
  4. 请注意,如果我只是在Wix代码中更改产品元素的版本,那么较新的安装程序将无法替换旧的安装程序。当我双击较新版本的安装程序时,它会显示一个错误对话框

      

    此产品的另一个版本已安装。无法继续安装此版本。要配置或删除此产品的现有版本,请使用“控制”面板上的“添加/删除程序”。

    示例代码:

    <?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"/>
    

1 个答案:

答案 0 :(得分:2)

  

该产品的另一个版本是   已安装。安装   这个版本无法继续。至   配置或删除现有的   使用此产品的版本   “控制”面板上的“添加/删除程序”。

这是使用完全相同的产品ID重建安装程序时出现的错误,然后再次运行它。要避免这种情况,请将产品元素ID设置为Id="*"

主要升级可以在this answer中实施。它与示例代码大致相同,只是它使用预处理程序变量来保持Product元素和UpgradeVersion元素之间的版本一致。它还可以防止降级。