簡體   English   中英

安裝解決方案中x86和x64之間的不兼容性

[英]Incompatibility between x86 and x64 in Installation solution

我有一個安裝解決方案,該解決方案具有安裝程序項目(不是Web安裝程序,而是簡單的安裝程序),該安裝程序項目通過我自己的代碼執行我的安裝步驟的另外兩個dll文件項目來安裝NT服務,Web服務和網站。 在安裝程序項目的用戶操作中,我調用了這些項目之一的安裝程序功能,並且此項目調用了第二個項目的安裝程序:安裝程序-> MiddleCaller-> InstallationCore。

所有這些都在Windows 7上開發,並且當我以32位編譯時都可以正常工作。

該項目必須在Windows 2008上運行。由於某些原因,所有項目都必須使用x64位。
為此,在MiddleCaller和InstallationCore中,我在項目->構建-> targer x64上單擊鼠標右鍵。 為了將安裝程序項目移動到安裝程序屬性中的64位(當項目處於活動狀態時),我檢查:目標平台:x64。

在x86上運行安裝時,出現錯誤:

The installation package is not supported by this processor type"

這很好,因為現在我知道我的安裝是用64位編譯的,但是當我在Windows 2008上運行時,我得到:

Error 1001. Exception occured while initializing the instance:  
System.BadImageFormatException: could not load file or Assembly   
'MiddleCaller, v...' or one of its dependencies. An attempt was  
made to load a program with an incorrect format.  

任何人都有一些想法我需要做些什么才能在x64上很好地運行安裝?
可能是我仍未將安裝程序項目移至x64位,如果是,我在哪里執行此操作?

謝謝您的光臨。

在Microsoft網站上找到了一個快速提示,該提示可能有助於解決安裝和部署項目的問題

64位托管的自定義操作會引發System.BadImageFormatException異常

如果將64位托管自定義操作添加到安裝程序項目,則Visual Studio生成過程會將32位版本的InstallUtilLib.dll作為InstallUtil嵌入到MSI中。 反過來,將加載32位.NET Framework來運行64位托管自定義操作,並導致BadImageFormatException異常。

要解決此問題,請用64位版本替換32位InstallUtilLib.dll。

從Windows Installer SDK在Orca中打開生成的.msi。

選擇二進制表。

雙擊單元格[Binary Data]記錄InstallUtil。

確保選中“從文件名讀取二進制文件”,然后單擊“瀏覽”按鈕。

瀏覽到%WINDIR%\\ Microsoft.NET \\ Framework64 \\ v2.0.50727。

注意Framework64目錄僅安裝在64位平台上,並且與64位處理器類型相對應。 選擇InstallUtilLib.dll。

單擊打開按鈕。

單擊確定按鈕。

在這種情況下有一些不清楚的事情。 我了解您在運行需要64位程序集的32位安裝程序時遇到困難。 如果這是正確的,則不允許您在做什么。 同一過程中不能同時具有32位和64位程序集-這是非法的。 如果安裝程序直接引用了64位程序集,則安裝程序也必須是64位。

需要說明的是:我相信32位安裝程序可以安裝64位應用程序,但是只能通過復制64位文件而不是通過實際調用64位文件來進行安裝。 支持此方法的唯一方法是,如果將64位文件加載到另一個進程中,並且使用IPC調用它們,但是即使這樣做也可能是一個不好的解決方案。

就您而言,我鼓勵您將安裝程序轉換為64位安裝程序。

因此,最終,當我需要安裝的所有dll和可執行文件都以x64位編譯時,我以AnyCpu模式編譯了MiddleCaller和InstallationCore。 我在Windows 2008 x64位和x64位外部依賴項(例如Oracle客戶端)上編譯了所有這些內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM