检测到新安装的版本:True
安装所有用户:True
删除以前的版本:True
版本:1.6.3
ProductCode 不同于以前版本的 ProductCode
UpgradeCode 与以前版本的 UpgradeCode 相同。
我了解到通常情况下,MSI应该删除版本比现有文件更新的文件,并用新文件替换。当我运行之前的MSI(将产品从1.4更新到1.5的那些)时,它按照描述正常工作。(我不确定它是使用哪个版本的Visual Studio编译的,但我猜测是VS2008。)
现在当我运行我的MSI时,它似乎首先运行“安装序列”,用新的.exe替换旧的,然后运行“卸载序列”,擦除.exe。当安装“完成”时,我的应用程序目录中没有.exe。(但是在“添加/删除程序”面板中,产品以1.6版本安装。)
(注:我可以注意到MSI的“安装”部分或“卸载”部分正在运行,因为两者都有打开控制台应用程序的自定义操作,我可以跟踪。)
经过更多的研究,我用 ORCA 比较了旧的 MSI 和我的 MSI,在 InstallExecuteSequence 表中发现了不同之处:
在旧的 MSI 中,RemoveExistingProducts 的序列号是 1525,位于 InstallInitialize(1500)和 AllocateRegistrySpace(1550)之间。
在我的 MSI 中,RemoveExistingProducts 的序列号是 6550,位于 InstallExecute(6500)和 InstallFinalize(6600)之间。
我没有看到表中其他的差异。
我甚至尝试使用 ORCA 手动编辑 MSI,并将 RemoveExistingProduct 的序列号设置为 1525。执行时,“卸载部分”运行正常,但随后出现了 2356 错误(经过一些研究,我猜测这是因为手动编辑 MSI 导致其损坏)。
如果有人有一个解释我的 MSI 行为及如何修复它的想法吗?
谢谢