2

我有安裝解決方案,安裝項目(不是網絡安裝程序,但簡單的安裝程序),安裝NT服務,Web服務和Web站點的另外兩個項目的dll與我自己的代碼執行我的安裝步驟。在安裝程序項目的用戶操作中,我調用其中一個項目的安裝程序函數,並且此項目調用第二個項目的安裝程序:installer - > MiddleCaller - > InstallationCore。安裝解決方案中的x86和x64之間的不兼容

所有這些都在Windows 7上進行開發,並在我編譯32位時全部正常工作。

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

當我在x86上運行安裝,我得到錯誤:

The installation package is not supported by this processor type" 

這是很好的,因爲現在我知道,我的安裝在64位編譯,但是當我在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位,如果是的話,我在哪裏做?

謝謝你的提前。

回答

0

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

0

在這種情況下有一些不清楚的東西。我知道您在運行調用64位程序集的32位安裝程序時遇到問題。如果這是正確的,那麼你在做什麼是不允許的。您不能在同一個進程中擁有32位和64位程序集 - 這是非法的。如果64位程序集直接由安裝程序引用,那麼安裝程序也必須是64位。

澄清:我相信32位安裝程序可以安裝64位應用程序,但它只能通過複製64位文件而不是通過實際調用64位文件來實現。支持這種方式的唯一方法是將64位文件加載到不同的進程中,並使用IPC調用它們,但即使這可能也是一個不好的解決方案。

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

+0

所有可能的事情在64位。還有正在安裝的應用程序以及安裝應用程序的項目。我不確定我在將上述屬性更改爲x64位後運行32位安裝程序...如果是這樣,您知道如何使安裝程序爲64位嗎? 是的,我仍然複製DLL,我只使用Project Output作爲安裝包中的兩個安裝項目。 – rodnower 2010-04-07 12:35:19

4

發現在微軟的網站上快速提示這可能是有用的troubleshooting setup and deployment projects

64-bit managed custom actions throw a System.BadImageFormatException exception

If you add a 64-bit managed custom action to a Setup project, the Visual Studio build process embeds a 32-bit version of InstallUtilLib.dll into the MSI as InstallUtil. In turn, the 32-bit .NET Framework is loaded to run the 64-bit managed custom action and causes a BadImageFormatException exception.

For the workaround, replace the 32-bit InstallUtilLib.dll with the 64-bit version.

Open the resulting .msi in Orca from the Windows Installer SDK.

Select the Binary table.

Double click the cell [Binary Data] for the record InstallUtil.

Make sure "Read binary from filename" is selected and click the Browse button.

Browse to %WINDIR%\Microsoft.NET\Framework64\v2.0.50727.

Note The Framework64 directory is only installed on 64-bit platforms and corresponds to the 64-bit processor type. Select InstallUtilLib.dll.

Click the Open button.

Click the OK button.

相關問題