2017-07-06 189 views
0

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

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

回答

1

最可能的解释是几件事情的组合:

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

  2. 由于MSI installer removes target folder AFTER install结果,你可能需要设置BackwardCompatibleIDGeneration属性中设置项目,否则内部的组件GUID可能无法与VS 2005和问题产生的那些兼容,你得到的都是升级的可能的结果。

+0

好的,我在看到你的答案之前就已经想清楚了,但是我会把你的答案设置为答案,因为它接近于解释。问题是RemoveExistingProducts步骤在安装顺序中太晚了。我在最后解决了这个问题(解决某些问题),并通过将它移动到InstallValidate(序列1525)后面,它不再在安装完成后删除安装文件夹,并且不再有第二个日志文件。这对于之前升级的程序来说从来都不是问题,所以VS2017构建的新MSI导致它具有以前没有的效果。 – WATYF

+0

我应该注意到,我没有弄清楚为什么我的其他应用程序表现得很奇怪,但我不完全确定这两个问题是相关的。 – WATYF

+0

严格来说,REP并不是“太迟” - 这是由设置团队进行的有意设计决定,因此安装(例如)该应用程序更新和修改的数据库的设置不会被旧式升级简单地删除。 – PhilDW