我有一個可執行文件,在 32 位元 Windows 上運行時可以正常工作,但在 64 位元 Windows 上運行時會中斷。
有辦法強制它在 64 位元機器上以 32 位元模式運作嗎?
我無權存取原始碼。
答案1
您想要多技術性的答案?您可能可以使用一些 SDK 工具強制 exe 始終運行 32 位,但這確實需要一些工作。
簡單的答案是從 32 位元進程啟動(例如,使用%SystemRoot%\SYSWOW64\cmd.exe
啟動)。
比較複雜的是檢查它是什麼類型的exe,然後自己修改。這裡的背景是要了解直接使用 Windows API 的語言的編譯程式碼是由開發人員在編譯時創建為 32 位元或 64 位元的。如果不返回原始程式碼,就無法變更此設定。
然而,越來越多的應用程式是透過虛擬化層編寫的,這使得編寫應用程式變得更加容易。有兩種常見的:.NET 和 Java。我對 Java 不太確定,只是知道強制安裝正確的 Java 運行時可以解決問題。
對於 .NET,您可以使用 SDK 工具:
- 驗證應用程式是“AnyCPU”:
corflags myExe.exe
。使用 .NET SDK 中的實用程式讀取 .NET 組件的標頭,對於 exe 將傳回類似以下內容:
版本:v4.0.30319 CLR 標頭:2.5 聚乙烯:PE32 CorFlags:0x20003 僅:1 32位元TREQ:0 32位參考:1 簽名:0
告訴32BITREQ
我這是AnyCPU
因為不需要 32 位元。
corflags
與其選項一起使用/32BITREQ+
,將 exe 修改為僅 32 位元。
答案2
如果您有 Windows 7 Professional(或更高版本),請使用虛擬 XP 模式微軟
這模擬了(?)32 位元環境,事實證明它對於運行一些舊的 16 位元程式很有用
答案3
嘗試了一切,但沒有任何效果。但後來考慮將 gta iv 目錄從 C/程式文件(x86)移動到 C/程式文件,它可以工作,因為 x86 適用於 32 位元應用程式(我認為),但無論如何都可以工作。
答案4
實際上有一種更簡單的方法來適應這種情況(不是長期解決方案)。
將應用程式「corflags.exe」放入 \windows\system32 資料夾中。以管理員身份開啟命令列並輸入...
corflags“exe 的路徑和名稱”/32BITPREF32+
這將強制應用程式作為 32 位元進程而不是 64 位元進程運行。