我已经使用WiX生成的安装程序交付了我的软件1.0版本,现在我想提供/传播1.1版本。如果可能的话,我想避免告诉人们在安装1.1之前先手动删除1.0。
但是,出于各种技术原因,我必须修改InstallScope
,将其从perUser
更改为perMachine
。没什么大不了的,除了它让升级变得麻烦。
我所看到的情况与this post提及的情况相同,即使您已完成所有proper work以实施升级,但在完成后,您会看到两个不同的条目已安装程序的列表,一个是1.0,另一个是1.1。这导致软件出现问题。
所以看起来基本的“删除以前的版本”逻辑在这里不起作用,所以我需要一些其他方法来卸载以前的版本。我尝试沿着解雇正确的msiexec /x
命令的路径通过ShellExecute CustomAction
移除以前的版本,但除非我遗漏了某些东西,否则序列中没有任何地方可以使用,因为你'在另一次运行中重新启动一个msiexec
命令。
然后我偶然发现了this page,其中详细介绍了一种记录在案的“链接”MSI的方法:
setupbld.exe -out $(TargetDir)setup.exe -msu FirstInstaller.msi -msu SecondInstaller.msi -setup $(ProjectDir)setup.exe
听起来很棒 - 我现在需要的只是一些MSI,它的唯一功能是删除版本1.0然后我可以将它与旧版本链接起来。
除了我没有找到关于如何做到这一点的大量文档。事实上,由于理论上这可能会用于删除您最初未安装的软件,因此出于安全考虑,我不确定这在技术上是否可行。
有没有人知道如何使用WiX创建MSI,其唯一目的是卸载软件?或者我完全错误地攻击这个问题?
答案 0 :(得分:2)
使用此Wix卸载以前的版本作为1.1版本的一部分。我不确定为什么你需要将MSI链接在一起。
How to implement WiX installer upgrade?
编辑:我错过了InstallScope要求的变化。所以真正需要的是一个引导程序。我在这里发布了如何创建BootStrapper:I need a WIX Bootstrapper Project that installs MY software and prerequisites
答案 1 :(得分:0)
解决方案是使用运行“msiexec.exe / x”命令的自定义操作。确保在InstallExecuteSequence中的 InstallFinalize 之后安排它。此外,它的返回应该是 asyncNoWait (异步执行,不要等待返回)。
使用这些设置,卸载使用不同的异步进程,避免冲突。