2009-12-03 102 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元素之间的版本一致。它也可以防止降级。