Visual Studio 设置项目:更新不起作用

qui*_*inn 7 windows-installer setup-project visual-studio-2010 visual-studio-setup-proje

我几天来一直面临一个问题,经过多次研究后,我找不到任何适合我的情况的东西。

事情是这样的:我正在使用 Visual Studio 2010 开发一个包含多个项目和一个安装项目的解决方案。我希望安装项目创建一个 MSI 文件以将产品从版本 1.5 更新到版本 1.6。

我遵循了本教程http://www.simple-talk.com/dotnet/visual-studio/updates-to-setup-projects/并更新了解决方案每个项目的程序集版本和文件版本号。

我的安装项目的设置是:
DetectNewerInstalledVersion : True
InstallAllUsers : True
RemovePreviousVersions : True
Version : 1.6.3
ProductCode 与以前版本的 ProductCode 不同
,UpgradeCode 与以前版本的 UpgradeCode 相同。

我读到,通常 MSI 应该删除版本比现有文件新的文件并替换为新文件。当我运行以前的 MSI(将产品从 1.4 更新到 1.5 的 MSI)时,它工作得很好,正如所描述的那样。(我不确定它是用哪个版本的 Visual Studio 编译的,但我猜是用 VS2008 编译的)。

现在,当我运行 MSI 时,它似乎首先运行“安装序列”,用新的 .exe 替换旧的 .exe,然后运行“卸载序列”,擦除 .exe。当安装“完成”时,我的应用程序目录中不再有 .exe。(但是,在“添加/删除程序”面板中,该产品显示为安装在版本 1.6 中)。

(注意:我可以注意到 MSI 的“安装”部分或“卸载”部分何时运行,因为两者都有打开控制台应用程序的自定义操作,我可以在其中进行跟踪)。

经过更多研究,我将旧的 MSI 与我的 ORCA 进行了比较,我注意到 InstallExecuteSequence 表中的差异:
对于旧的 MSI,RemoveExistingProducts 的序列号是1525,介于 InstallInitialize (1500) 和 AllocateRegistrySpace (1550) 之间。
在我的 MSI 中,RemoveExistingProducts 的序列号是6550,介于 InstallExecute (6500) 和 InstallFinalize (6600) 之间。
我在表中看不到任何其他差异。

我什至尝试使用 ORCA 手动编辑 MSI,并将 RemoveExistingProduct 的序列号设置为 1525。在执行时,“卸载部分”正确运行,但随后出现 2356 错误(经过一些研究,我猜这是因为手动编辑MSI 损坏了它)。

如果有人有任何想法可以解释我的 MSI 的行为以及如何修复它?

谢谢

Ran*_*dyK 6

这似乎是插件“Microsoft Visual Studio 2017 安装程序项目”的错误。msi 文件使用错误的序列号(太高)构建。安装新文件会卸载旧产品,因此新文件会被错误删除。

手动修复:更改顺序,以便在安装新项目之前卸载旧产品。

  • 使用 orca.exe 打开 msi(或任何适合您的编辑器)
  • 转到 InstallExecuteSequence 表
  • 更改RemoveExistingProducts 序列号,使其位于InstallValidate 和InstallInitialize 之间。比如我把它从6550改成了1450。

我最终创建了一个简单的脚本来自动执行此修复作为构建后步骤。你可以在 github 上获取它... InstallerStuff

  • 只是作为补充。VS2019 中仍然存在同样的问题,但在设置属性中,您现在可以启用向后兼容 ID。不再需要手动编辑。 (2认同)