我可以使用WiX创建一个MSI,其唯一目的是卸载软件吗?

时间:2010-12-07 17:19:17

标签: installer wix windows-installer uninstall msiexec

我已经使用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,其唯一目的是卸载软件?或者我完全错误地攻击这个问题?

2 个答案:

答案 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 (异步执行,不要等待返回)。

使用这些设置,卸载使用不同的异步进程,避免冲突。