首页 文章

安装后MSI安装程序删除目标文件夹

提问于
浏览
0

多年来我一直在使用自定义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中构建的应用程序的新版本之后,另外两个应用程序尝试在我启动它时运行安装程序(而不仅仅是启动它程序) . 这两个应用程序没有任何改变 . 我也不完全确定这是相关的,但似乎很奇怪它会在与另一个问题完全同时发生 .

有谁知道任何或所有这些的解释?

1 回答

  • 1

    最可能的解释是两件事的结合:

    • 从VS 2008开始,RemovePreviousVersions升级不再卸载所有旧产品(文件,注册表项等),然后再安装新产品 . 安装现在是一个覆盖,其中所有传入的升级文件都安装在新文件之上,因此适用覆盖规则 . 这也意味着在旧设置中卸载自定义操作实际上会在升级结束时运行,并且不应删除任何文件,因为它们现在将删除刚刚安装的文件 .

    • 作为MSI installer removes target folder AFTER install的结果,您可能需要在安装项目中设置BackwardCompatibleIDGeneration属性,否则内部组件Guids可能与VS 2005生成的内容不兼容,并且您获得的问题可能是升级的结果 .

相关问题