visual studio安装项目:更新不起作用

时间:2012-06-28 10:24:13

标签: visual-studio-2010 windows-installer setup-project 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
版本: 1.6.3
ProductCode与先前版本的ProductCode不同 和UpgradeCode与先前版本的UpgradeCode相同。

我读到,通常MSI应删除版本比现有版本更新的文件,并替换为新版本。当我运行以前的MSI(将产品从1.4更新到1.5)时,它的工作原理就像所描述的那样好。 (我不确定它的编辑版本是哪个版本,但我想这是VS2008版本。)

现在,当我运行MSI时,它似乎首先运行“安装序列”,用新的替换旧的.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的行为以及如何解决它?

由于

2 个答案:

答案 0 :(得分:0)

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

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

  • 使用orca.exe(或任何适用于您的编辑器)打开msi
  • 转到InstallExecuteSequence表
  • 更改RemoveExistingProducts 序列号,使其介于InstallValidate和 InstallInitialize。例如,我将其从6550更改为1450。

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

答案 1 :(得分:0)

该文章在两个方面刚刚过时:

  1. 这并不能说明在更高版本的Visual Studio安装项目中,升级已更改为在现有文件的“顶部”,然后删除了较旧的产品。这不是错误,而是功能。示例:如果您安装的产品带有一个数据库,然后该数据库由客户填充了一百万个数据库条目,则旧的升级会将其删除,然后再安装新版本的产品。

  2. 由于新版本是在旧版本上安装的,因此会应用文件替换更新规则,例如,新版本替换旧版本(基于文件版本)并且首次安装后修改的文件不会被删除(因此保留我们的假设数据库)。

https://docs.microsoft.com/en-us/windows/desktop/msi/default-file-versioning

话虽如此,但这似乎不是问题的原因。如果您是从VS 2008升级到VS 2010的,这听起来像是您遇到了这个问题:

https://support.microsoft.com/en-us/help/2418919/fix-files-and-registry-keys-for-the-installation-path-disappear-unexpe