在安装程序项目中基于用户删除以前的版本

User-based removal of previous version in Installer Project

如何创建 MSI 安装程序,让用户决定是否保留以前的版本?

我已经将当前安装程序的 UpgradeCode 设置为与以前版本相同,正如我在一篇文章中看到的那样。

我试过将 RemovePreviousVersions 设置为 True 但它会自动卸载以前的版本;有什么办法让用户决定吗?

想法是,用户应该能够:

更新

只是一个信息,我不了解这些工具,我只是在尝试 Installer Project,但如果有必要,我愿意学习其他工具,因为只要输出是 MSI。

更新#2

我可以在 Advanced Installer 中完成,但这是一项付费功能,所以...我想也许我也可以在 Installer Project 或其他软件中完成。有人吗?

Paradigmatitis:此要求不适用于 MSI 范例。为了支持不同版本的并排部署,必须调整设置本身和应用程序以和平共存,这样它们就不会意外地覆盖相同的数据文件和注册表项,也不会争夺文件关联等...

Nice-to-Have?:这是绝对要求还是 "nice to have" 问题?如果我要实现这个,我基本上会让每个安装版本独立于旧版本,并且可能使用自定义操作来触发旧版本的卸载,或者向升级添加临时行 table。不是微不足道的。不是火箭科学。不是我曾经尝试过的东西。所以你看到了提出建议的困境。

并排:为了使每个设置 "side-by-side" 可用,我会使用 WiX 的自动- guids 和 "moving target" 目标文件夹,版本号嵌入在安装文件夹名称中。我也可能会为每个版本设置一个新的升级代码,尽管你也可以不用它。一般最好保持升级码相同,以便识别相关产品。


过去的爆炸:还有一些其他的可能性。你可以使用 multi-instance transforms,你可以使用 virtualization。我之前在这里写过:Installing Multiple Instances by different msi having same Package Code。请浏览一下。

在我看来,唯一的方法就是拥有两个 MSI 文件。他们都有新的 ProductCodes,他们是:

  1. 具有相同的 UpgradeCode 并将 VS RemovePreviousVersions 设置为 true 以进行替换升级。

  2. 具有不同的 UpgradeCode,因此是一个新产品,将在前一个产品仍然存在的情况下进行安装。

然后您需要一个启动器程序,询问用户需要升级还是并行,然后启动所需的程序。

基本问题是安装可能不是 "side-by-side",可能是 "on top of"。是什么阻止了新文件中的文件替换其他已安装产品中的现有文件?如果快捷方式具有相同的名称怎么办,用户如何知道使用哪个?您是否需要同时阻止两个版本的应用程序 运行?安装中是否有任何 "single use" 项,例如服务(不能有两个相同的名称)或命名事件、互斥体等?安装两个版本时升级策略是什么?