我一直在使用自定義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