如何使WIX MSI始终删除以前的版本?

前端之家收集整理的这篇文章主要介绍了如何使WIX MSI始终删除以前的版本?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
只要开发人员检查更改,我有CI构建系统构建MSI.我们对安装的MSI进行自动化验收测试.

基本上每个MSI都是完全安装的产品,所以我们没有任何版本控制(ala Windows安装程序)本身.

每个MSI都具有相同的产品GUID和升级GUID,以及相同的版本号.但是具有不同的包GUID(在wix中使用’*’).

我想要实现的是,当安装程序运行时,它将“卸载”任何先前安装的产品版本,并从单个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 Installer不允许这种类型的“永久覆盖安装版本”安装?

G./

所以我没有找到一种方法,而不用更改版本号.

我更改产品GUID与每个构建,但保持升级GUID相同..

我也不得不将RemoveExistingProducts更改为Before =’InstallInitialize’..否则它只会在安装路径中的构建之间留下“deltas”.

奇怪但真实..

感谢大家的回应.

G./

附:如下面的Wim所述,我可以用’*’替换生成的产品GUID

猜你在找的Windows相关文章