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 的行为以及如何修复它?
谢谢
这似乎是插件“Microsoft Visual Studio 2017 安装程序项目”的错误。msi 文件使用错误的序列号(太高)构建。安装新文件后会卸载旧产品,因此新文件会被错误删除。
手动修复:更改顺序,以便在安装新项目之前卸载旧产品。
我最终创建了一个简单的脚本来自动执行此修复作为构建后步骤。你可以在 github 上获取它... InstallerStuff
| 归档时间: |
|
| 查看次数: |
6638 次 |
| 最近记录: |