我一直在使用自定义MSI部署过程多年,没有出现问题。最近,我从VS2005升级到VS2017,并尝试使用VS2017部署新版本的程序。然后奇怪开始了。MSI安装程序在安装后删除目标文件夹
我注意到的第一件奇怪的事情是,我的安装程序的新版本之后,它不会运行。经过一番调查,事实证明,目标安装文件夹(在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中构建的应用程序的新版本后,其他两个应用程序在我启动它们时尝试运行安装程序(而不是启动程序)。这两个应用程序没有任何改变。我也不完全确定这是相关的,但似乎很奇怪,它会在与另一个问题完全相同的时间发生。
有谁知道任何或所有这一切的解释?
好的,我在看到你的答案之前就已经想清楚了,但是我会把你的答案设置为答案,因为它接近于解释。问题是RemoveExistingProducts步骤在安装顺序中太晚了。我在最后解决了这个问题(解决某些问题),并通过将它移动到InstallValidate(序列1525)后面,它不再在安装完成后删除安装文件夹,并且不再有第二个日志文件。这对于之前升级的程序来说从来都不是问题,所以VS2017构建的新MSI导致它具有以前没有的效果。 – WATYF
我应该注意到,我没有弄清楚为什么我的其他应用程序表现得很奇怪,但我不完全确定这两个问题是相关的。 – WATYF
严格来说,REP并不是“太迟” - 这是由设置团队进行的有意设计决定,因此安装(例如)该应用程序更新和修改的数据库的设置不会被旧式升级简单地删除。 – PhilDW