共用方式為


將 Arm 支援新增至 Windows 應用程式

基於 Arm 的設備因其節能、更長的電池壽命和令人印象深刻的處理能力而變得越來越受歡迎。 Arm 上的 Windows 支援針對日益流行的 AI 和機器學習工作負載進行調整的神經處理單元 (NPU)。

本指南涵蓋為採用 Arm64 處理器的裝置新增支援的 Windows 應用程式的步驟。 它還提供指引,幫助解決可能干擾您建立應用程式的 Arm64 型版本的潛在問題或阻礙因素,例如第三方相依性或外掛程式。

針對 x86 或 x64 Windows 應用程式的 Arm 型裝置模擬

Arm 版本的 Windows 10 包含模擬技術,可讓現有的未修改 x86 應用程式在 Arm 裝置上執行。 Windows 11 擴充模擬,以在 Arm 支援的裝置上執行未修改的 x64 Windows 應用程式。

雖然在 Arm 裝置上模擬 x64 和 x86 的能力是向前邁出的一大步,但本指南可協助您新增 Arm 原生支援,讓您的應用程式可以利用原生效能增益和 Arm64 支援裝置的獨特品質,包括:

  • 優化應用程序的功耗以延長設備電池壽命。
  • 將 CPU、GPU 和 NPU 的效能優化,以加速工作流程,特別是在使用 AI 時。

此外, 核心驅動程式 必須建置為原生 Arm64。 核心不包含模擬。 此限制主要影響虛擬化案例。 如需使用需要直接存取以核心模式執行的 OS 或硬體內部的裝置驅動程式,而不是使用者模式,且尚未更新以支援 Arm64 處理器的應用程式,請參閱 使用 WDK 建置 Arm64 驅動程式

備註

漸進式 Web 應用程式 (PWA) 已以原生 Arm64 效能執行。

先決條件

如果您要使用 Arm 型裝置來更新應用程式(原生編譯 - 為執行所在的相同平台產生程式代碼),您可以使用:

  • Visual Studio 17.10 簡介 – Preview 1 (2024 年 2 月)

  • Visual Studio 2022 v17.4 或更新版本。 這是 Visual Studio 的第一個 GA 版本,原生支援在 Arm 型處理器上建置和偵錯 Arm64 應用程式。 Visual Studio 2022 17.4 和 Microsoft Visual C++ (MSVC) 原生 Arm64 版本,相較於舊版模擬版本,效能大幅提升。

  • (選擇性) LLVM (Clang) v12+ 或更新版本。 LLVM 12 新增了在 Windows 上運行的 Arm64 官方二進位版本,包含 Clang 編譯器、LLD 連結器和 compiler-rt 運行時庫。

如果您要更新 Windows 應用程式以支援使用 x64 或 x86 Intel 型裝置的 Arm(交叉編譯),您可以使用:

在交叉編譯或本機編譯之間進行選擇時,請考慮幾個因素,例如可用的硬體和測試執行的簡單性。

備註

GCC,GNU 編譯程式集合 支援預計在不久的將來實現。

新增 Arm64 原生支援的步驟

若要更新您的應用程式以在 Arm64 裝置上原生執行:

  1. 在 Visual Studio 中將 Arm64 設定新增至您的專案
  2. 測試和偵錯新建的 Arm64 應用程式
  3. 在 Arm 裝置上建置及測試您的應用程式

確認您的應用程式已針對 Arm 裝置進行最佳化後:

  1. 更新安裝程式併發佈更新的應用程式
  2. 規劃持續更新的計畫

步驟 1 - 在 Visual Studio 中將 Arm64 設定新增至您的專案

若要將具有偵錯和發行目標的新 ARM64 解決方案平臺新增至現有的 x64 或 x86 應用程式專案:

  1. 在 Visual Studio 中開啟您的方案(專案程式代碼)(請參閱支援版本 的必要條件 )。
  2. 在 [標準] 工具列的 [解決方案平臺] 下拉功能表中(或在 [建置] 功能表中),選取 [Configuration Manager...]
  3. 開啟 [使用中解決方案平臺] 下拉選單,然後選取 <新增...>
  4. 在 [鍵入或選取新平台] 下拉選單中,選取 [ARM64],並確定 [複製設定來源] 值設定為 [x64],啟用 [建立新專案平台] 複選框,然後選取 [確定]

祝賀! 您已開始將 Arm 支援新增至您的應用程式。 接下來,請檢查您的 Arm64 解決方案組建是否成功。

如果您的解決方案未成功建置,您必須解決導致建置失敗的問題。 最有可能的原因是某個相依性不支援 ARM64,詳細內容可參考下文中的 疑難排解

(選擇性):若要確認您的應用程式二進位檔是針對 Arm64 建置,請在 PowerShell 中開啟您的專案目錄 (以滑鼠右鍵按一下 Visual Studio 方案總管中的應用程式專案,然後選取 [在終端機中開啟])。 變更目錄,以便選取您專案的新 bin\ARM64\Debug 或發行目錄。 輸入命令:dumpbin /headers .\<appname>.exe(以您的應用程式名稱取代 <appname>)。 在終端機的輸出結果中向上捲動以找到FILE HEADER VALUES區段,並確認第一行是AA64 machine (ARM64)

步驟 2 - 測試和偵錯新建的 Arm64 應用程式

若要檢查當您在 Visual Studio 的專案中新增 Arm64 解決方案平台後,Arm64 解決方案是否成功建置:

  1. 關閉 [作用中解決方案平臺 ] 視窗。
  2. 將組建設定從偵錯變更為發行
  3. [建置] 下拉式功能表中,選取 [重建解決方案] ,然後等候專案重建。
  4. 您會收到 Rebuild All succeeded 輸出。 如果沒有,請參閱 疑難排解 一節。

為您的應用程式建置二進位檔以支援 Arm64 之後,您想要測試它們。 該測試需要在 Arm 上運行 Windows 的設備或虛擬機。

如果您在 Arm 裝置上的 Windows 上進行開發,則可以使用 Visual Studio 本機偵錯輕鬆設定。 如果您要交叉編譯 (使用未在 Arm 處理器上執行的裝置) ,則您想要在 Arm 裝置上的 Windows 或虛擬機器上使用遠端偵錯,以啟用您在 Visual Studio 中的開發體驗,同時在另一部裝置上執行 Arm64 應用程式。

提供測試用的 Arm 硬體或虛擬機器上的 Windows

如果您正在尋找用於持續整合 (CI) 和測試的硬體,以下是一些具有 Arm64 型處理器的 Windows 裝置:

如需設定在 Arm 上執行 Windows 以支援 CI 和測試的虛擬機器(VM)的說明,請參閱 快速入門:在 Azure 入口網站中建立 Arm 虛擬機上的 Windows

步驟 3 - 在 Arm 裝置上建置及測試您的應用程式

將測試自動化納入是您持續整合與持續交付(CI/CD)策略的重要考量。 針對在 Windows 上執行的 Arm64 解決方案,請務必在 Arm64 架構上執行測試套件。 此架構可以是基於 Arm 硬體的實際 Windows,使用先前列出的其中一個 Arm 裝置,或是基於先前列出的虛擬機器(VM)。

在與測試相同的電腦上完成時,編譯應用程式會更方便,但在許多情況下不需要。 相反地,您可以考慮擴充現有的建置基礎結構,以產生Arm64的交叉編譯輸出。

步驟 4 - 更新安裝程式併發佈更新的應用程式

如果您發佈至 Microsoft Store,一旦您遵循上述步驟建置應用程式的 Arm64 版本,您就可以流覽 合作夥伴中心儀錶板 ,並將新建置的 ARM64 二進位檔新增至提交,以更新 Microsoft Store 中現有的應用程式套件。

如果您尚未在 Microsoft Store 中發佈應用程式,您可以根據您想要提交 MSI 或 EXE、MSIX 套件、PWA 或應用程式附加元件的指示來 建立應用程式提交

如果您建置自己的安裝程式,您應該確保它可以成功安裝新的 Arm64 版本。 大部分的安裝程序架構,例如 WiXSquirrelInnoSetupInstallAware,以及其他工具,均可支援 Arm 上的 Windows。

如果您從網頁提供應用程式的安裝程式,您可以使用 User-Agent 用戶端提示 來偵測客戶何時從 Arm 裝置上的 Windows 流覽,並提供更新的 Arm 原生版本應用程式。 不同於使用者代理程式字串,User-Agent 用戶端提示可讓您區分Arm上的客戶與 x86 裝置上的客戶。

步驟 5 - 規劃進行中的更新

現在您已發佈應用程式的 Arm64 版本,您想要確保它以與其他應用程式版本相同的方式保持更新。 保持不同架構的版本和功能保持一致,以避免將來造成客戶混淆。

故障排除

干擾或阻止您新增現有 x64 或 x86 Windows 應用程式的 Arm64 版本的常見問題包括:

有一個尚未為 ARM64 編譯的相依性正在阻礙您進行成功的建置

如果您因為相依性而無法建置應用程式,無論是內部、來自協力廠商或開放原始碼程式庫,您必須更新該相依性以支援 ARM64 架構,或將其移除。

  • 針對內部相依性,請重新建置相依性以支援 ARM64。

  • 對於第三方依賴項,請要求維護者使用 ARM64 支援重建依賴項。

  • 針對開放原始碼相依性,請檢查 vcpkg 以查看較新版本的相依性是否包含您可以更新的 ARM64 支援。 如果沒有可用更新,您可以考慮自行為套件新增 ARM64 支援。 許多開源維護者對這項貢獻表示讚賞。

  • Linaro 組織與企業和開源社區合作,開發基於 Arm 技術的軟件。 您可以透過 Linaro Service Desk 提出要求,以協助更新 Windows on Arm 上任何缺失的相依性套件支援

  • 使用 Arm64EC。 Arm64EC 版本的相依性可用來重建應用程式,同時仍使用 x64 版本的相依性。 Arm64EC 進程中的任何 x64 程式代碼,包括來自相依性的程式代碼,都會在應用程式的模擬下執行。 (在此情況下,Arm64 版本的相依性無法使用。

  • 移除並替換您應用程式專案中的相依性。

程式代碼是針對 Arm64 以外的特定架構所撰寫

您的應用程式依賴核心驅動程式

核心驅動程式 必須建置為原生 Arm64。 核心不提供任何模擬。 此限制主要影響虛擬化場景。 如需使用需要直接存取以核心模式 (而不是使用者模式) 執行的 OS 或硬體內部的裝置驅動程式,且尚未更新以支援 Arm64 處理器的應用程式,請參閱 使用 WDK 建置 Arm64 驅動程式

此外, Windows 上的驅動程式 必須建置為 Arm64,而且無法模擬。 如需依賴尚未更新以支援 Arm64 處理器的軟體驅動程式的應用程式,請參閱 使用 WDK 建置 Arm64 驅動程式

Windows on Arm 的工具鏈

除了本指南 必要條件 一節中共用的 Visual Studio 和 LLVM (CLANG)支援之外,Arm64 也支援下列工具和架構:

以及第三方框架,包括:

需要協助嗎? 利用我們的應用程式保證服務

ARM 應用程式保證諮詢服務旨在協助開發人員建置針對 ARM 進行優化的應用程式。 這項服務是我們現有承諾的補充:您的應用程式會在 Arm 上的 Windows 上執行,如果您遇到任何問題,Microsoft 會協助您補救。 深入瞭解

註冊 Windows Arm 諮詢服務