如何使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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用doSMP和foreach的并行随机森林大大增加了内存
- 在Windows(.Net)上转换JPEG颜色空间(Adobe RGB到
- windows-7 – Windows多点触控事件和LabView
- Windows/Linux命令查看文件MD5,SHA1,SHA256 文件
- windows-8 – Metro主题系统画笔不会改变
- windows-7 – 使用CScript运行Javascript?
- windows-server-2003 – 如何转发Windows DNS服务
- 如何以编程方式在Windows 7中的StartMenu上固定应
- windows-server-core – 将Windows Server 2016桌
- 用于在Windows上将node.js连接到odbc的库?