Hinzufügen von ARM-Unterstützung zu Ihrer Windows-App
ARM-basierte Geräte erfreuen sich zunehmender Beliebtheit, denn sie zeichnen sich durch einen geringen Stromverbrauch, eine längere Akkulaufzeit und eine beeindruckende Rechenleistung aus. Hinzu kommt die Windows auf ARM-Unterstützung für neuronale Verarbeitungseinheiten (Neural Processing Units, NPUs), die auf die immer beliebteren KI- und Machine Learning-Workloads abgestimmt sind.
In diesem Leitfaden erfahren Sie, wie Sie Ihren Windows-Apps Unterstützung für Geräte mit ARM64-Prozessoren hinzufügen. Es werden außerdem Wege aufgezeigt, wie Sie mögliche Probleme lösen oder Hindernisse (z. B. Abhängigkeiten von Drittanbietern oder Plug-Ins) überwinden können, die der Erstellung einer ARM64-basierten Version Ihrer App im Wege stehen könnten.
Emulation auf ARM-basierten Geräten für x86- oder x64-Windows-Apps
Die ARM-Versionen von Windows 10 umfassen eine Emulationstechnologie, mit der vorhandene, nicht modifizierte x86-Apps auf ARM-Geräten ausgeführt werden können. Windows 11 erweitert diese Emulation, sodass auch unveränderte x64 Windows-Apps auf ARM-Geräten ausgeführt werden können.
Die Möglichkeit zur Emulation von x64- und x86-Systemen auf ARM-Geräten ist ein großer Fortschritt. Dieser Leitfaden unterstützt Sie jedoch dabei, native Unterstützung für ARM-Geräte hinzuzufügen, sodass Ihre App die Vorteile der nativen Leistungsoptimierung und die einzigartigen Eigenschaften von ARM64-Geräten nutzen kann, darunter:
- Optimieren des Stromverbrauchs Ihrer App, um die Akkulaufzeit Ihres Geräts zu verlängern.
- Optimierung der CPU-, GPU- und NPU-Leistung zur Beschleunigung von Workflows, insbesondere bei der Arbeit mit KI.
Zusätzlich müssen Kerneltreiber als native ARM64-Treiber erstellt werden. Im Kernel findet keine Emulation statt. Dies beeinflusst vor allem Virtualisierungsszenarien. Wenn Sie Apps mit Gerätetreibern verwenden, die direkten Zugriff auf interne Betriebssystem- oder Hardwarekomponenten benötigen, die im Kernelmodus (und nicht im Benutzermodus) ausgeführt werden, und diese noch nicht für die Unterstützung von ARM64-Prozessoren aktualisiert wurden, lesen Sie Erstellen von ARM64-Treibern mit dem WDK.
Hinweis
Progressive Web-Apps (PWAs) werden bereits mit nativer ARM64-Leistung ausgeführt.
Voraussetzungen
Wenn Sie Ihre App mit einem ARM-basierten Gerät aktualisieren (natives Kompilieren – Generieren des Codes für dieselbe Plattform, auf der Sie arbeiten), können Sie Folgendes verwenden:
Einführung in Visual Studio 17.10 – Vorschauversion 1 (Februar 2024)
Visual Studio 2022 v17.4 oder höher. Dies ist der erste GA-Release von Visual Studio, das die Entwicklung und das Debuggen von ARM64-Apps auf ARM-basierten Prozessoren nativ unterstützt. Sowohl Visual Studio 2022 17.4 als auch die nativen ARM64-Versionen von Microsoft Visual C++ (MSVC) bieten im Vergleich zu früheren emulierten Versionen eine deutlich bessere Leistung.
(Optional) LLVM (Clang) v12+ oder höher. LLVM 12 fügt eine offizielle Binärversion hinzu, die unter Windows auf ARM64 gehostet wird und einen Clang-Compiler, LLD-Linker und compiler-rt-Laufzeitbibliotheken beinhaltet.
Wenn Sie Ihre Windows-App so aktualisieren, dass ARM über ein Intel-basiertes x64- oder x86-Gerät unterstützt wird (Crosskompilierung), können Sie Folgendes verwenden:
- Visual Studio 2022 v17.10 (empfohlen)
- Visual Studio 2019 v16.x
- Visual Studio 2017 v15.9 oder höher (UWP, Desktop-Brücke, win32 C++)
- LLVM (Clang) v12+
Bei der Entscheidung zwischen Crosskompilierung und nativer Kompilierung müssen verschiedene Faktoren berücksichtigt werden, z. B. die verfügbare Hardware und die Benutzerfreundlichkeit der Testausführung.
Hinweis
Die Unterstützung von GCC (GNU Compiler Collection) ist für die nahe Zukunft geplant.
Schritte zum Hinzufügen nativer ARM64-Unterstützung
So aktualisieren Sie Ihre App für die native Ausführung auf ARM64
- Hinzufügen einer ARM64-Konfiguration zu Ihrem Projekt in Visual Studio
- Testen und Debuggen der neu erstellten ARM64-App
- Kompilieren und Testen der App auf ARM-Geräten
Sobald Sie bestätigt haben, dass Ihre App erfolgreich für ARM-Geräte optimiert wurde:
- Aktualisieren Ihres Installers und Veröffentlichen Ihrer aktualisierten App
- Planen fortlaufender Updates
Schritt 1: Hinzufügen einer ARM64-Konfiguration zu Ihrem Projekt in Visual Studio
So fügen Sie Ihrem vorhandenen x64- oder x86-App-Projekt eine neue ARM64-Lösungsplattform mit Debug- und Releasezielen hinzu
- Öffnen Sie Ihre Projektmappe (Projektcode) in Visual Studio (siehe Voraussetzungen für die unterstützten Versionen).
- Wählen Sie auf der Standardsymbolleiste (oder im Menü „Erstellen“) im Dropdownmenü „Lösungsplattformen“ die Option Konfigurations-Manager... aus.
- Öffnen Sie das Dropdownmenü „Aktive Lösungsplattform“, und wählen Sie <Neu...> aus.
- Wählen Sie im Dropdownmenü „Neue Plattform eingeben oder auswählen“ die Option ARM64 aus, und stellen Sie sicher, dass der Wert „Einstellungen kopieren von“ auf x64 festgelegt und das Kontrollkästchen „Neue Projektplattformen erstellen“ aktiviert ist. Wählen Sie dann OK aus.
Herzlichen Glückwunsch! Sie haben damit begonnen, Ihrer App ARM-Unterstützung hinzuzufügen. Überprüfen Sie als Nächstes, ob Ihre ARM64-Projektmappe erfolgreich kompiliert wird.
Wenn Ihre Projektmappe nicht erfolgreich kompiliert werden kann, müssen Sie die Probleme beheben, die eine Builderstellung verhindern. Der wahrscheinlichste Grund ist eine fehlende Abhängigkeit für ARM64, dieser Fall wird weiter unten im Abschnitt Problembehandlung abgedeckt.
(Optional): Wenn Sie selbst überprüfen möchten, ob Ihre App-Binärdatei für ARM64 kompiliert wurde, können Sie Ihr Projektverzeichnis in PowerShell öffnen. Klicken Sie dazu im Visual Studio-Projektmappen-Explorer mit der rechten Maustaste auf Ihr App-Projekt, und wählen Sie In Terminal öffnen aus. Wechseln Sie die Verzeichnisse, sodass das neue bin\ARM64\Debug
- oder Releaseverzeichnis Ihres Projekts ausgewählt ist. Geben Sie diesen Befehl ein: dumpbin /headers .\<appname>.exe
(ersetzen Sie <appname>
durch den Namen Ihrer App). Scrollen Sie in den Ausgabeergebnissen Ihres Terminals nach oben zum Abschnitt FILE HEADER VALUES
, und bestätigen Sie, dass die erste Zeile AA64 machine (ARM64)
lautet.
Schritt 2: Testen und Debuggen der neu erstellten ARM64-App
So überprüfen Sie die erfolgreiche Kompilierung Ihrer ARM64-Projektmappe, nachdem Sie Ihrem Projekt in Visual Studio die ARM64-Lösungsplattform hinzugefügt haben
- Schließen Sie das Fenster „Aktive Lösungsplattform“.
- Ändern Sie die Buildeinstellung von Debug in Release.
- Wählen Sie im Dropdownmenü „Erstellen“ die Option Projektmappe neu erstellen aus, und warten Sie, bis das Projekt neu kompiliert wurde.
- Es wird die Ausgabe „Neues Erstellen erfolgreich“ angezeigt. Falls nicht, lesen Sie den nachstehenden Abschnitt Problembehandlung.
Nachdem die Binärdateien für Ihre App zur Unterstützung von ARM64 erstellt wurden, sollten Sie sie testen. Hierzu benötigen Sie ein Gerät oder einen virtuellen Computer, auf dem Windows on ARM ausgeführt wird.
Wenn Sie die Entwicklung auf einem Windows on ARM-Gerät durchführen, ist die Einrichtung des lokalen Debuggens in Visual Studio ganz einfach. Bei der Kreuzkompilierung (mit einem Gerät ohne ARM-Prozessor), sollten Sie das Remotedebuggen auf einem Windows on ARM-Gerät oder einer VM durchführen, um Ihre Entwicklungsumgebung in Visual Studio nutzen zu können, während die ARM64-App auf einem anderen Gerät ausgeführt wird.
Windows auf ARM-Hardware oder -VMs zum Testen verfügbar
Wenn Sie auf der Suche nach Hardware für Continuous Integration (CI) und Tests sind, finden Sie hier einige der Windows-Geräte mit einem ARM64-basierten Prozessor:
Hilfe zum Einrichten einer Virtual Machine (VM), auf der Windows auf Arm ausgeführt wird, um CI und Tests zu unterstützen, finden Sie in Schnellstart: Erstellen einer Windows auf Arm Virtual Machine im Azure-Portal.
Lesen Sie die Azure-Blogankündigung der allgemeinen Verfügbarkeit für Virtuelle Azure-Computer mit Ampere Altra Arm-basierten Prozessoren mit der Möglichkeit, Arm64-basierte Versionen von Windows 11 Pro und Enterprise auszuführen.
Mehr erfahren zur Windows 11 auf Arm Insider-Vorschau (VHDX) für die Erstellung einer lokalen Windows auf Arm-VM mit Hyper-V und der Windows Insider-VHDX. *ARM64-VMs werden nur auf Geräten unterstützt, die die Voraussetzungen erfüllen. Das Erstellen von Arm64-VMs wird auf x64-Hardware nicht unterstützt. Sie müssen die VM in der Cloud hosten, wie oben im Schnellstart-Link gezeigt.
Mehr dazu sehen Sie im Video „Fragen Sie Expert*innen: Apps mit Ampere-basierten Azure-VMs erstellen“.
Schritt 3: Kompilieren und Testen der App auf ARM-Geräten
Das Hinzufügen eines Testautomatisierungsdurchlaufs ist eine wichtige Überlegung für Ihre CI/CD-Strategie (Continuous Integration und Continuous Delivery). Für ARM64-Lösungen, die unter Windows betrieben werden, ist es wichtig, dass Sie Ihre Testsammlung auf einer ARM64-Architektur ausführen. Dies könnte entweder eine Windows auf ARM-Hardwarekomponente (eines der oben aufgeführten ARM-Geräte) oder eine der oben aufgelisteten virtuellen Computer (VMs) sein.
Das Kompilieren der App ist bequemer, wenn es auf demselben Computer stattfindet wie die Tests, aber in vielen Fällen ist dies nicht erforderlich. Stattdessen können Sie eine Erweiterung der bestehenden Buildinfrastruktur in Betracht ziehen, um eine crosskompilierte Ausgabe für ARM64 zu erzeugen.
Schritt 4: Aktualisieren Ihres Installers und Veröffentlichen Ihrer aktualisierten App
Wenn Sie Ihre App im Microsoft Store veröffentlichen, nachdem Sie wie oben beschrieben eine ARM64-Version Ihrer App kompiliert haben, können Sie Ihr vorhandenes App-Paket im Microsoft Store aktualisieren. Wechseln Sie dazu zum Partner Center-Dashboard, und fügen Sie der Übermittlung die neu kompilierten ARM64-Binärdateien hinzu.
Wenn Ihre App noch nicht im Microsoft Store veröffentlicht wurde, können Sie je nachdem, ob Sie eine MSI- oder EXE-Datei, ein MSIX-Paket, eine PWA oder ein App-Add-On übermitteln möchten, den Anweisungen zum Erstellen einer App-Übermittlung folgen.
Wenn Sie einen eigenen Installer erstellen, stellen Sie sicher, dass dieser Ihre neue ARM64-Version erfolgreich installieren kann. Die meisten Installerframeworks, z. B. WiX, Squirrel, InnoSetup, InstallAware und andere, unterstützen Windows auf ARM ohne Probleme.
Wenn Sie den App-Installer über eine Webseite anbieten, können Sie mithilfe von User-Agent-Clienthinweisen ermitteln, ob Ihre Kund*innen von einem Windows auf ARM-Gerät aus zugreifen, und ihnen die aktualisierte native ARM-Version Ihrer App anbieten. Im Gegensatz zur user-agent-Zeichenfolge können Sie mit User-Agent-Clienthinweisen zwischen Benutzer*innen auf ARM- und Benutzer*innen auf x86-Geräten unterscheiden.
Schritt 5: Planen fortlaufender Updates
Nachdem Sie nun eine ARM64-Version Ihrer App veröffentlicht haben, möchten Sie sicherstellen, dass diese in gleicher Weise aktualisiert wird wie andere Versionen Ihrer App. Es empfiehlt sich, die Versionen und Features der verschiedenen Architekturen aufeinander abzustimmen, um Verwirrung bei den Kund*innen zu vermeiden.
Problembehandlung
Im Folgenden werden einige häufige Probleme aufgeführt, die das Hinzufügen einer ARM64-Version Ihrer vorhandenen x64- oder x86-Windows-App behindern oder verhindern können:
- Eine nicht für ARM64 kompilierte Abhängigkeit verhindert einen erfolgreichen Build.
- Der Code wurde für eine andere Architektur als ARM64 geschrieben.
- Ihre App stützt sich auf einen Kerneltreiber.
- Sie stecken fest und benötigen Hilfe.
Eine nicht für ARM64 kompilierte Abhängigkeit verhindert einen erfolgreichen Build
Wenn die Builderstellung aufgrund einer Abhängigkeit scheitert – unabhängig davon, ob es sich um eine interne Abhängigkeit, eine Abhängigkeit von einem Drittanbieter oder eine Open-Source-Bibliothek handelt –, müssen Sie entweder einen Weg finden, diese Abhängigkeit zur Unterstützung der ARM64-Architektur zu aktualisieren, oder Sie müssen die Abhängigkeit entfernen.
Für interne Abhängigkeiten empfehlen wir, die Abhängigkeit für ARM64-Unterstützung neu zu erstellen.
Für Drittanbieterabhängigkeiten empfehlen wir, beim Maintainer eine Neuerstellung mit ARM64-Unterstützung anzufordern.
Bei Open-Source-Abhängigkeiten sollten Sie mithilfe der vcpkg-Datei überprüfen, ob eine neuere Version der Abhängigkeit mit ARM64-Unterstützung vorhanden ist, auf die Sie aktualisieren können. Wenn kein Update vorhanden ist, erwägen Sie, dem Paket selbst ARM64-Unterstützung beizufügen. Viele Open-Source-Maintainer werden Ihnen für diesen Beitrag dankbar sein.
Die Linaro-Organisation arbeitet mit Unternehmen und Open-Source-Communitys zusammen, um Software auf ARM-basierter Technologie zu entwickeln. Sie können eine Anfrage an den Linaro Service Desk senden, um zur Aktualisierung der Paketunterstützung für alle fehlenden Abhängigkeiten in Bezug auf Windows auf ARM beizutragen.
Erwägen Sie die Verwendung von Arm64EC. Durch Arm64EC-Versionen von Abhängigkeiten können Anwendungen neu kompiliert werden, während weiterhin die x64-Versionen von Abhängigkeiten verwendet werden. Beliebiger x64-Code, einschließlich Code von Abhängigkeiten, in einem Arm64EC-Prozess wird per Emulation in Ihrer App ausgeführt. (ARM64-Versionen von Abhängigkeiten können in diesem Fall nicht verwendet werden.)
Die letzte Möglichkeit wäre, die Abhängigkeit aus Ihrem App-Projekt zu entfernen und/oder sie zu ersetzen.
Der Code wurde für eine andere Architektur als ARM64 geschrieben
- CPU-spezifische Assembler- oder Inlineaufrufe systeminterner Funktionen müssen modifiziert werden, um den verfügbaren Anweisungen und Funktionen der ARM-CPU zu entsprechen. Eine Anleitung finden Sie in diesem Artikel zur Verwendung von Assembly und systeminternen Komponenten in C- oder C++-Code.
Ihre App stützt sich auf einen Kerneltreiber
Kerneltreiber müssen als native ARM64-Treiber erstellt werden. Im Kernel findet keine Emulation statt. Dies beeinflusst vor allem Virtualisierungsszenarien. Wenn Sie Apps mit Gerätetreibern verwenden, die direkten Zugriff auf interne Betriebssystem- oder Hardwarekomponenten benötigen, die im Kernelmodus (und nicht im Benutzermodus) ausgeführt werden, und diese noch nicht für die Unterstützung von ARM64-Prozessoren aktualisiert wurden, lesen Sie Erstellen von ARM64-Treibern mit dem WDK.
Außerdem müssen Treiber unter Windows als ARM64 erstellt werden und können nicht emuliert werden. Informationen zu Apps mit Verwendung von Softwaretreibern, die noch nicht für die Unterstützung von ARM64-Prozessoren aktualisiert wurden, finden Sie unter Erstellen von ARM64-Treibern mit dem WDK.
Toolkette für Windows auf ARM
Zusätzlich zur Unterstützung für Visual Studio und LLVM (CLANG) (siehe Abschnitt Voraussetzungen in diesem Leitfaden) werden auch die folgenden Tools und Frameworks für ARM64 unterstützt:
- .NET 7
- .NET 6 (LTS)
- .NET 5.0.8+
- .NET Framework 4.8.1
- clang-cl kompiliert C++-Code für Windows und kann als Ersatz für den MSVC-Compiler und -Linker dienen. Das Programm verwendet weiterhin die Header und Bibliotheken von MSVC und ist ABI-kompatibel mit MSVC.
Außerdem werden u. a. folgende Drittanbieterframeworks unterstützt:
- Qt für Windows, Boost C++-Bibliothek, Bazel, ein Open-Source-Tool für Builds und Tests.
- Die Unterstützung für GCC und Mingw in der GNU Toolchain für Windows auf ARM ist in Bearbeitung bei Linaro.
- Eine vollständige Liste finden Sie unter Windows On ARM (WOA) – Confluence (atlassian.net).
Benötigen Sie Hilfe? Nutzen Sie unseren App Assure-Dienst
Der App Assure-Beratungsdienst für ARM unterstützt Entwickler*innen bei der Erstellung von ARM-optimierten Apps. Dieser Dienst ergänzt unser bestehendes Versprechen: Ihre Apps werden unter Windows auf ARM laufen, und wenn Probleme auftreten, hilft Microsoft Ihnen bei deren Behebung. Weitere Informationen
Windows on Arm