1

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

  1. 如何检测我的应用程序是否安装在目标机器上?该应用程序可能已使用 NSIS(旧版本)或 MSI(现在开始)安装。
  2. 如果目标机器上安装了旧/相同版本的产品,如何编写可以升级的 WiX 安装程序。我在几个网站上找到了这个主题,但所有这些都不起作用。具体来说,我想知道每个版本的软件需要在安装程序代码中更改哪些信息(GUID、版本等)。
  3. 我们产品的三个/四个版本每年都会发布。哪种安装程序最适合我?

请注意,如果我只是在 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"/>
4

1 回答 1

3

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

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

可以按照此答案实施重大升级。它与您的示例代码大致相同,只是它使用预处理器变量来保持Product元素和UpgradeVersion元素之间的版本一致。它还可以防止降级。

于 2009-12-04T00:24:30.693 回答