我一直在使用自定义MSI部署过程多年没有任何障碍。最近,我从VS2005升级到VS2017并尝试使用VS2017部署新版本的程序。然后奇怪的事情开始了。
我注意到的第一个奇怪的事情是,在安装我的程序的新版本后,它将无法运行。经过一番调查后发现目标安装文件夹(在Program Files中)已经消失了。该程序仍然列在程序和功能中,仍然“行动”,好像它已安装(安装程序构建的所有菜单/快捷方式仍然存在,尝试重新运行相同的安装程序,询问我是否要修复或删除等) ,但安装文件夹本身已经消失了。重新运行相同的安装程序以修复它后,目标文件夹又回来了,程序运行正常。我尝试从VS2017推出另一个新版本(增加版本号),安装程序工作正常没有问题。
因此,VS2017内置的后续安装工作正常,就像VS2005中内置的后续安装一样正常。问题是从我在VS2005中构建的最新版本转移到VS2017中构建的第一个版本。我通过删除应用程序,安装最新的VS2005版本以及升级到VS2017内置的版本来测试这一点。三台不同的机器也出现同样的问题。
我认为这个问题可能与MSI文件中主要可执行文件更改的GUID有关(我在VS2017中构建安装程序后就会这样做),但我不确定。
我打开了详细的MSI日志记录并进行了测试升级(从最后一个VS2005版本到VS2017版本)而不是只创建一个日志文件,而是创建了两个。第一个说安装成功,第二个说它失败了。它们彼此间隔几秒钟创造出来。这是每个日志的结尾:
=== Logging stopped: 7/6/2017 9:23:12 ===
MSI (c) (7C:EC) [09:23:12:733]: Note: 1: 1707
MSI (c) (7C:EC) [09:23:12:733]: Note: 1: 2262 2: Error 3: -2147287038
MSI (c) (7C:EC) [09:23:12:733]: Note: 1: 2262 2: Error 3: -2147287038
MSI (c) (7C:EC) [09:23:12:733]: Product: TaskRunner -- Installation completed successfully.
MSI (c) (7C:EC) [09:23:12:734]: Windows Installer installed the product. Product Name: TaskRunner. Product Version: 3.3.1059. Product Language: 1033. Manufacturer: WATYF. Installation success or error status: 0.
MSI (c) (7C:EC) [09:23:12:736]: Grabbed execution mutex.
MSI (c) (7C:EC) [09:23:12:736]: Cleaning up uninstalled install packages, if any exist
MSI (c) (7C:EC) [09:23:12:744]: MainEngineThread is returning 0
=== Verbose logging stopped: 7/6/2017 9:23:12 ===
=== Logging stopped: 7/6/2017 9:23:39 ===
MSI (c) (B8:90) [09:23:39:075]: Note: 1: 1729
MSI (c) (B8:90) [09:23:39:075]: Note: 1: 2262 2: Error 3: -2147287038
MSI (c) (B8:90) [09:23:39:075]: Note: 1: 2262 2: Error 3: -2147287038
MSI (c) (B8:90) [09:23:39:075]: Product: TaskRunner -- Configuration failed.
MSI (c) (B8:90) [09:23:39:075]: Windows Installer reconfigured the product. Product Name: TaskRunner. Product Version: 3.3.1059. Product Language: 1033. Manufacturer: WATYF. Reconfiguration success or error status: 1602.
MSI (c) (B8:90) [09:23:39:075]: Grabbed execution mutex.
MSI (c) (B8:90) [09:23:39:075]: Cleaning up uninstalled install packages, if any exist
MSI (c) (B8:90) [09:23:39:075]: MainEngineThread is returning 1602
=== Verbose logging stopped: 7/6/2017 9:23:39 ===
安装过程中不会出现任何错误或消息或奇怪的内容。它似乎按预期完成。我甚至不确定第二个安装程序日志是导致问题的原因。它似乎很奇怪它会在那里并说它失败了。
发生的另一件奇怪的事情是,在我这样做之后,我在我的机器上构建和安装的所有.NET程序突然开始表现得好像它们没有正确安装一样。我在这台机器上有两个其他应用程序(内置VS2005),在尝试安装我在VS2017中构建的应用程序的新版本之后,另外两个应用程序尝试在我启动它时运行安装程序(而不仅仅是启动它程序)。这两个应用程序没有任何改变。我也不完全确定这是相关的,但似乎很奇怪它会在与另一个问题完全同时发生。
是否有人知道任何或所有这些的解释?
答案 0 :(得分:1)
最可能的解释是两件事的结合:
从VS 2008开始,在安装新产品之前,RemovePreviousVersions升级不再卸载所有旧产品(文件,注册表项等)。安装现在是一个覆盖,其中所有传入的升级文件都安装在新文件之上,因此适用覆盖规则。这也意味着在旧设置中卸载自定义操作实际上会在升级结束时运行,并且不应删除任何文件,因为它们现在将删除刚刚安装的文件。
作为MSI installer removes target folder AFTER install的结果,您可能需要在安装项目中设置BackwardCompatibleIDGeneration属性,否则内部组件Guids可能与VS 2005生成的那些不兼容,并且您获得的问题是可能是升级的结果。