如何使一个WIX MSI随时删除以前的版本?(How do I make a WIX MSI alw

2019-06-26 15:32发布

我有CI构建系统建立一个MSI每当一个变化的开发商检查。 我们运行安装MSI自动化验收测试。

基本上每个MSI是一个完整的安装的产品,所以我们没有任何版本(ALA Windows安装)本身..

每个MSI都有相同的产品GUID和升级GUID,和相同的版本号。 但具有不同的包装GUID(在威克斯使用“*”)。

我想实现的是,当安装程序运行时,它会“卸载”以前安装的产品版本,并安装新的..从单一MSI(我们有一个令人费解的安装过程,是在我们控制的.. Citrix和SCCM,所以我们想给他们一个简单的安装路径)

我试过了:

<Property Id='PREVIOUSVERSIONSINSTALLED' Secure='yes' />
<Upgrade Id='$UPGRADE_GUID'>  
  <UpgradeVersion Minimum='1.0.0.0'
                  Maximum='99.0.0.0'
                  Property='PREVIOUSVERSIONSINSTALLED'
                  IncludeMinimum='yes'
                  IncludeMaximum='no' />
</Upgrade>

并且有:

<InstallExecuteSequence>
  <RemoveExistingProducts After='InstallFinalize' />
</InstallExecuteSequence>

并曾尝试:

<InstallExecuteSequence>
  <RemoveExistingProducts After='InstallInitialize' />
</InstallExecuteSequence>

但是,当我尝试从随后的构建,我得到安装MSI:

Another version of this product is already installed. Installation of this version cannot continue. 
To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel. 

这是不是真的是我要去的..

我明白,我可以更新产品标签的版本属性,但变得难以管理。 首先,我可以生产20 + MSI构建一个一天,我有一个数字,产生MSI的,我不知道如何处理版本编号的方式,是有道理的构建管道。

也许Windows安装程序只是不允许这种类型的“始终覆盖安装版”安装?

Answer 1:

所以,我没有发现这样做不改变版本号的方式。

我改变,每次构建的产品GUID,但保留升级GUID相同。

我也不得不在RemoveExistingProducts改为=“InstallInitialize”之前。 否则,只留下了“增量”建立在安装路径之间。

正如下面维姆指出,我可以替换GUID生成的产品'*'



Answer 2:

您可以使用此代码,删除旧版本并安装一个较新的一个:

<Product Id="*"
         UpgradeCode="87795f3dc95-81f5-473e-955e-2871a5bd66a5"
         Name="AppName"
         Language="1033"
         Version="1.0.6"
         Manufacturer="Manufacturer Name">
  <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
  <MajorUpgrade Schedule="afterInstallInitialize"
                DowngradeErrorMessage="A later version of [ProductName] is already installed"
                AllowSameVersionUpgrades="yes" />
</Product>


Answer 3:

尝试

<InstallExecuteSequence>
  <RemoveExistingProducts After='InstallFinalize' />
</InstallExecuteSequence>

这应该删除任何现有产品的安装定稿后,尽管你可以在自定义你做点

看到http://mohundro.com/blog/2009/02/23/getting-started-with-wix-and-major-upgrades/

又见接受的答案为这个问题



Answer 4:

如果产品代码和版本是相同但包代码是不同的,你总是会得到Windows安装程序错误消息。

我强烈建议,包括为您安装的版本信息在你的CI构建。 如果要安装,随后升级每个版本,那么版本是不是一件坏事有。 它应该是比较容易把它添加到一个CI构建。



文章来源: How do I make a WIX MSI always remove a previous version?