【发布时间】:2017-04-04 15:11:47
【问题描述】:
安装了一个旧程序,该程序使用 InstallShield 为 VS2013 生成的包安装。最近升级到 VS2015 社区,但由于社区无法使用 InstallShield,我不得不使用 Installer Projects 重做我的安装程序。
我已经到了我有一个工作安装程序的地步,一切似乎都很好,直到我尝试升级。我的安装程序中有一个匹配的UpgradeCode,更大的Version 数字,InstallAllUsers 与旧的匹配,RemovePreviousVersions 设置为 true。 Afaik 一切都应该井井有条。
正确运行新安装程序会卸载以前的版本,并且 GUI 看起来像正确安装新安装程序,它甚至正确显示在控制面板的添加/删除程序列表中。然而,应该安装新版本的整个目录都不见了。 再次运行安装程序进行修复,然后真正安装新文件。
我错过了什么?为什么不能一口气升级?这种情况下有哪些调试方法?
非常感谢任何有用的 cmets、指针和链接。
编辑:发布后,我也尝试了versioning my assemblies,正如here 指出的那样,但没有结果。我发现版本 65535 是无效的。
Google 告诉我有一个叫做 REINSTALLMODE 的东西,但我似乎找不到任何可以影响它的地方。
【问题讨论】:
-
启用详细日志记录以查看实际情况。
msiexec -i yoursetup.msi -l*v logfile.txt -
@zett42 哇,3k 行调试,我看到了很多 guid 和神秘的属性更改说明等。在阅读时我应该寻找任何常见的字符串吗?
-
MSI (s) (78:E8) [09:47:04:318]:文件:C:\Program Files (x86)\
...AddIn.dll;覆盖;不会打补丁;现有文件是较低版本。这看起来很重要 -
是的,所以我似乎很清楚我的问题确实与版本有关,并且可能 InstallShield 已经写入了一些高得离谱的旧文件。发现我可以在创建 msi 后change REINSTALLMODE,所以现在真正的问题是,我该怎么做才能影响生成的 msi 和 exe 文件
-
msi 想先复制新文件,然后再删除旧版本 -- 这是可能的,取决于
RemoveExistingProducts操作的顺序。如果之后确实删除了旧版本,这可能已经是问题的根源,因为这很难解决。我建议在InstallInitialize之前立即对RemoveExistingProducts进行排序。 MSDN 指出这是“效率低下”,但根据我的经验,这是最稳健的方式。
标签: visual-studio-2015 windows-installer upgrade major-upgrade