2013-04-18 153 views
5

我有一個32位C#應用程序與目標x86安裝程序。這個應用程序可以安裝在x64機器上運行沒有問題。但是,當我們安裝在x64系統上時,來自供應商(已集成到軟件中)的第三方硬件現在需要使用64位DLL。32位C#應用程序如何利用64位DLL

目前我已經把32位DLL和64位DLL放在我的項目中。但是目標x86安裝程序顯然不喜歡64位DLL。

我可以創建一個解決方案,我可以部署64位DLL和/或32位DLL,但仍然只有一個安裝程序項目嗎? (我看了第三方軟件稱爲高級安裝程序,但我不知道這是否會幫助我實現我需要的解決方案)

或者是否可以創建一個通用的安裝程序項目?

注意:兩個安裝程序(x86與x64)部署不可行,因爲我們有一個我不想重新定義的自動更新過程。維護一個MSI文件對我很重要。

建議非常感謝。

+1

你可以在NSIS中做到這一點。 – leppie

+3

這裏真正的問題是,您將無法使用x86應用程序中的x64 DLL。 –

+6

您無法使用來自32位進程的64位DLL(反之亦然)。這部分是因爲地址空間之間無法翻譯。有關詳情,請參閱[Raymond Chen的博客上的此帖](http://blogs.msdn.com/b/oldnewthing/archive/2008/10/20/9006720.aspx)。如果你想混合使用64位和32位,你必須有兩個進程和一些進程間通信。 –

回答

0

安裝從x86的文件MSI不與高級安裝問題,下面的文章介紹瞭如何做到這一點: http://www.advancedinstaller.com/user-guide/qa-OS-dependent-install.html

另外,如果你有需要的同名DLL的​​兩個版本要放在你應該看這裏的文件夾中:http://www.advancedinstaller.com/user-guide/qa-install-file-with-same-name.html

但是,你應該首先檢查你的應用程序是否可以正確加載x64 DLL,就像在他們的評論中提到的那樣。

+0

他爲什麼要檢查?該進程針對x86,這意味着它只有一個32位的進程。即使它被設置爲「ANY CPU」,如果它引用一個32位的庫,它也將是一個32位的進程。這也意味着它將無法加載任何64位庫。 –

+0

我已考慮到此DLL可能由加密提到的第三方組件加載,而不是直接由他的x86應用程序加載。 –

相關問題