2017-02-14 61 views
0

有人請幫助我,因爲我即將失去理智。無法安裝安裝程序類型。 - >無法加載一個或多個請求的類型

我在C#/ Visual Studio 2015/.Net 4.6.1中創建了一個Windows服務。然後我使用內置模板爲它創建了一個簡單的安裝程序。自定義操作,ProjectInstaller類 - 一切正常。

我跑了幾臺計算機此安裝程序,一切工作順利,直到我試圖給一個特定的客戶端的Windows Server 2012的安裝它,突然我得到

Unable to get installer types in the [xxx].exe assbmely. --> Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. 

到目前爲止,我已經試過是:

  1. 在服務器上安裝.Net 4.6.1(之前未安裝)。

  2. 將所有服務的依賴關係切換到CopyLocal = false,然後再返回。

  3. 冉融合日誌並沒有任何綁定錯誤。

  4. 使用完整日誌記錄對MSI進行掃描,並得到完全無用的日誌,該日誌只是再次顯示相同的錯誤。

  5. 在ProjectInstaller類的所有代碼路徑周圍放置try/catch。沒有幫助。

這讓我瘋狂。如果沒有辦法記錄發生了什麼事情,如果給我這個問題,我怎麼能確切地知道哪個dll/type?

任何人都可以請幫助嗎?

回答

2

這是您的自定義操作程序集,服務。它想要的類型來自你的安裝程序集,它使用反射來加載和實例化以發現安裝程序類。 Fusion日誌顯示沒有錯誤出於同樣的原因,通過反射創建和實例化。內部沒有Windows安裝程序對託管代碼安裝程序類的支持,因此有一個C++填充Dll代表您執行此操作,並且此黑盒Dll中沒有診斷程序。

幾點建議:

  1. 你沒有張貼您的設置的架構(64/32)(上投放),如果你的裝配值爲anycpu,64,32位等一些Windows服務器做默認情況下不安裝32位子系統--WoW64是可選的 - 因此32位任何內容都可能不支持。如果是這種情況,您需要構建64位安裝並使您的程序集成爲64位。

  2. 您可能對另一個不可用的程序集有依賴性。這似乎不太可能,但請記住。

  3. 我相信這個問題已經解決,但是這讓您知道託管代碼自定義操作會發生什麼,以及爲什麼他們以前在64位系統上失敗。再次,這歸結於您的設置的TargetPlatform,以及您的安裝是x86還是x64,以及Server 2016是否支持WoW64安裝。

https://blogs.msdn.microsoft.com/heaths/2006/02/01/64-bit-managed-custom-actions-with-visual-studio/

反正這些可能指向你走向一個解決方案。順便說一下,如果我可以使用這個術語,「真正的安裝程序」不要使用託管代碼來安裝服務,因爲Windows安裝程序具有內置支持來執行此操作。

+0

感謝您的詳細回覆。我的項目是x86;我只是將它重建爲目標x64(當然必須經過Orca),現在它工作。所以,讓我直接得到這個...一些Windows服務器根本不安裝32位子系統 - 所以我的32位應用程序無法運行這個32位shim dll,因爲它找不到它? – user884248

+0

如果我不清楚 - 非常感謝你!!!!!! – user884248

相關問題