2009-04-25 21 views
0

我們有一個在x86上運行良好的WinForms應用程序,但有許多第三方組件可以進行win32調用。爲了讓應用程序在x64上運行,我現在編譯x86平臺。我們的習慣是在系統分區之外的服務器上安裝我們的胖客戶端,所以我們昨天在Win2003 x64服​​務器上安裝了「F:\ Program Files(x86)」。從該目錄運行時,進程拒絕退出。我試圖在任務管理器,taskkill和Process Explorer中殺死它們,但是重新引導服務器會導致這些進程中斷。當我卸載並重新安裝在C:\ Program Files(x86)中時,進程正常退出。在「C: Program Files(x86)」之外運行時,爲什麼我的WinForms應用程序不能編譯爲「x86」,而是在「x64」計算機上退出?

在x64機器上運行鍼對x86編譯的WinForms應用程序時,安裝位置是否真的很重要?

+0

是否在x86上的其他位置(而不是程序文件)工作? – 2009-04-25 14:34:37

+0

是F:本地物理硬盤還是映射的東西,網絡共享或類似的東西? – 2009-04-25 17:54:47

+0

@Mehrdad:是的,該應用程序完全可在客戶端上部署。 – flipdoubt 2009-04-28 16:43:11

回答

1

根據我的經驗,我可以告訴它可以在幾乎任何位置的x64系統上運行x86二進制文件(如果二進制文件在system32中,如果事情仍然有效,但是我確信x86程序可以從Program Files運行)。我相信程序文件/程序文件(x86)文件夾只是爲了方便區分本機x64應用程序和舊x86應用程序。從你的描述來看,你所面對的聽起來很像WoW64兼容性問題,但是如果你有非託管代碼的依賴關係,那麼你可能首先需要驗證這個非託管代碼是否運行正常,然後深入挖掘阻止你的程序收盤。另外,知道如何嘗試終止應用程序,如果它使用多個線程或單個線程,目標版本的.NET運行時版本以及服務器上安裝的版本(包括。 服務包)。

1

這是在黑暗中拍攝的照片。您的程序是否嘗試讀取或加載與應用程序一起部署在同一目錄或子目錄中的任何數據?如果是這樣,您可能會遇到以下問題。

您的應用程序可能使用的值取決於正在運行的處理器體系結構以查找目錄。以環境變量ProgramFiles爲例。在64位機器上,ProgramFiles環境變量實際上將指向32位應用程序的「Program Files(x86)」目錄。所以這是可能的,你是程序試圖加載像下面和崩潰

string root = Environment.GetVariable("ProgramFiles"); 
string file = Path.Combine(root, "MyAppName\DataDirectory\SomeDataFile.txt"); 
string data = File.ReadAllLines(file); 

最後一行將失敗,因爲路徑將解析爲數據

C:\ Program Files文件(x86)的\ MyApplication \ DataDirectory \ SomeDataFile.txt

但是該應用程序已部署到Program Files中。所以,真正的路徑將是

C:\ Program Files文件\ MyApplication的\ DataDirectory目錄\ SomeDataFile.txt

相關問題