共用方式為


針對 x86 桌面應用程式進行疑難解答

這很重要

使用 Visual Studio 2017 或更新版本時,可以將您的應用程式重新編譯為 Arm64 或 Arm64EC,讓應用程式以完整的原生速度執行。 如需編譯為 Arm64 的詳細資訊,請參閱部落格文章:Arm 開發上 Windows 10 的官方支援。 如需 Arm64EC 的相關信息,請參閱 宣佈 Arm64EC:在 Arm上建置適用於 Windows 11 的原生和互通應用程式。

如果 x86 桌面應用程式在運作模式上與 x86 計算機不同,以下是一些協助您進行疑難解答的指引。

問題 解決方法
您的應用程式依賴不是針對 Arm 設計的驅動程式。 將 x86 驅動程式重新編譯至 Arm64。 請參閱 使用 WDK建置 Arm64 驅動程式。
您的應用程式僅適用於 x64。 如果您針對 Microsoft Store 進行開發,請提交應用程式的 Arm 版本。 如需詳細資訊,請參閱應用程式套件架構。 如果您是 Win32 開發人員,建議您將應用程式重新編譯至 Arm64。 如需詳細資訊,請參閱 Visual Studio 對於 Windows 10 在 Arm 開發上的支援早期預覽
您的應用程式使用 1.1 之前的 OpenGL 版本,或需要硬體加速 OpenGL。 如果有的話,請使用應用程式的 DirectX 模式。 使用 DirectX 9、DirectX 10、DirectX 11 和 DirectX 12 的 x86 應用程式將在 Arm 上運作。 如需詳細資訊,請參閱 DirectX Graphics and Gaming
您的 x86 應用程式無法如預期般運作。 請按照 Arm 平台上的程式相容性疑難解決工具的指引,嘗試使用相容性疑難解答工具。 如需其他一些疑難解答步驟,請參閱 文章《在 Arm 上針對 x86 應用程式的疑難解答》。

WOW 的最佳做法

當應用程式發現它在 WOW 下執行,然後假設它位於 x64 系統上時,就會發生一個常見問題。 進行此假設後,應用程式可能會執行下列動作:

  • 試著安裝不支援 Arm 的 x64 版本。
  • 檢查原生登錄檢視下的其他軟體。
  • 假設有 64 位 .NET Framework 可供使用。

一般而言,當應用程式決定在 WOW 下執行時,不應該對主機系統進行假設。 請盡量避免與OS的原生元件互動。

應用程式可以在原生註冊表視圖下放置註冊表機碼,或根據 WOW 的存在來執行功能。 原始 IsWow64Process 只會指出應用程式是否在 x64 計算機上執行。 應用程式現在應該使用 IsWow64Process2 來判斷它們是否在具有 WOW 支援的系統上執行。

司機

所有內核模式驅動程式、User-Mode Driver Framework (UMDF) 驅動程式,以及列印驅動程式都必須編譯,才能符合 OS 的架構。 如果 x86 應用程式具有驅動程式,則必須針對 Arm64 重新編譯該驅動程式。 不過,在模擬下,x86 應用程式可能會正常執行,其驅動程式必須針對Arm64重新編譯,而相依於驅動程式的任何應用程式體驗將無法使用。 如需編譯 Arm64 驅動程式的詳細資訊,請參閱 使用 WDK建置 Arm64 驅動程式。

Shell 延伸模組

嘗試將 Windows 元件連結或將其 DLL 載入 Windows 進程的應用程式,必須重新編譯這些 DLL 以符合系統的架構;亦即Arm64。 通常這些是由輸入法編輯器(IME)、輔助技術和 Shell 擴充應用程式使用(例如,在檔案總管中顯示雲端儲存圖示,或在滑鼠右鍵選單中)。 若要瞭解如何將應用程式或 DLL 重新編譯至 Arm64,請參閱 Arm 開發 部落格文章上 Windows 10 Visual Studio 支援的早期預覽。

偵錯 / 除錯

若要更深入調查應用程式的行為,請參閱 Arm偵錯,深入了解用於Arm的偵錯工具和策略。

虛擬機

Qualcomm Snapdragon 835 行動計算機平臺不支援 Windows Hypervisor 平臺。 因此,使用 Hyper-V 執行虛擬機將無法運作。 我們會繼續在這些技術上進行投資,以用於未來的高通晶片。

動態程式代碼產生

系統會在運行時產生 Arm64 指令,以模擬在 Arm64 上執行的 X86 桌面應用程式。 這表示如果 x86 傳統型應用程式在其程式中防止動態程式代碼產生或修改,則無法支援該應用程式在 Arm64 上以 x86 身分執行。

這是一種安全性緩解措施,某些應用程式會在其程序中使用具有 旗標的 ProcessDynamicCodePolicy API 來啟用。 若要在 Arm64 上以 x86 程式成功執行,則必須停用此風險降低原則。