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

Installation 我可以使用WiX创建一个MSI,其唯一目的是卸载软件吗?,installation,wix,uninstallation,windows-installer,Installation,Wix,Uninstallation,Windows Installer,我已经用WiX生成的安装程序交付了我的软件版本1.0,现在我想交付/传播版本1.1。如果可能的话,我希望避免在安装1.1之前告诉人们先手动删除1.0 但是,由于各种技术原因,我不得不修改InstallScope,将其从perUser更改为perMachine。没什么大不了的,只是升级很麻烦 我看到的情况与前面提到的一样,尽管您已经完成了所有的升级,但在完成升级后,您会在已安装程序列表中看到两个不同的条目,一个是1.0,另一个是1.1。这会导致软件出现问题 因此,基本的“删除以前的版本”逻辑在这里

我已经用WiX生成的安装程序交付了我的软件版本1.0,现在我想交付/传播版本1.1。如果可能的话,我希望避免在安装1.1之前告诉人们先手动删除1.0

但是,由于各种技术原因,我不得不修改
InstallScope
,将其从
perUser
更改为
perMachine
。没什么大不了的,只是升级很麻烦

我看到的情况与前面提到的一样,尽管您已经完成了所有的升级,但在完成升级后,您会在已安装程序列表中看到两个不同的条目,一个是1.0,另一个是1.1。这会导致软件出现问题

因此,基本的“删除以前的版本”逻辑在这里似乎不起作用,因此我需要一些其他方法来卸载以前的版本。我试图沿着正确的<代码> MsiExc/x/Cuff>命令的路径通过一个<代码> SeLeExistCudioActudio<代码>删除以前的版本,但是除非我丢失了一些东西,否则序列中没有位置,因为在另一个运行过程中,你正在开除一个代码> MSsiExc< /Cord>命令。p> 然后,我偶然发现了一个小小的“链接”MSI的方法:

setupbld.exe -out $(TargetDir)setup.exe -msu FirstInstaller.msi -msu SecondInstaller.msi -setup $(ProjectDir)setup.exe
听起来很棒-我现在只需要一些MSI,它的唯一功能是删除1.0版,然后我可以将其与旧版本链接在一起

除了我没有找到很多关于如何做到这一点的文档。事实上,由于这在理论上可能被用来删除您最初没有安装的软件,我甚至不确定出于安全原因这在技术上是否可行


有人知道如何使用WiX创建MSI,其唯一目的是卸载软件吗?还是我完全错误地解决了这个问题?

使用此Wix卸载以前的版本,将其作为1.1版本的一部分。我不知道你为什么要把微星连在一起

编辑:我错过了InstallScope要求中的更改。所以真正需要的是一个引导器


我在这里发布了如何创建引导程序:

解决方案是使用运行“msiexec.exe/x”命令的自定义操作。确保计划在InstallExecuteSequence中的InstallFinalize之后执行。另外,它的返回应该是asyncNoWait(异步执行,不要等待返回)


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

虽然这通常是一个很好的建议,但InstallScope中的更改会阻止升级表条目卸载以前的版本,如Schnapple问题开头所述。我不确定为什么我遗漏了问题的这一部分。啊!我忘了提到的是,我的帖子中涉及的软件与.NET无关(即,它不使用或不需要.NET),因此我不能要求.NET是运行安装程序的先决条件(该软件的1.0版本之前确实需要.NET和boy,我们如何发现有多少XP用户没有安装它)。乍一看,我不知道-你的链接问题中提到的DotNetBootTrapper项目是否需要.NET来运行安装程序?或者只是.NET来运行GUI来设计它?它只是使用.NET来运行GUI来设计它。它最终生成的只是一组XML清单,根据您定义的一组条件运行(或不运行)相应的MSI。dotNetInstaller使用起来既复杂又神秘,但它似乎完成了任务,而且是免费的。谢谢。不知什么原因,这对我不起作用。可能是InstallScope中的更改。在任何情况下,之后我都会安装两个软件副本,这两个副本都不起作用