Problembehandlung für x86-Desktop-Apps

Wichtig

Mit Visual Studio 2017 oder höher ist es möglich, Ihre App auf Arm64 oder Arm64EC neu zu kompilieren, sodass Ihre App mit voller systemeigener Geschwindigkeit ausgeführt wird. Weitere Informationen zum Kompilieren als Arm64 finden Sie im Blogbeitrag: Offizieller Support für Windows 10 on Arm-Entwicklung. Informationen zu Arm64EC finden Sie unter Ankündigung von Arm64EC: Building Native and Interoperable Apps for Windows 11 on Arm.

Wenn eine x86-Desktop-App nicht wie auf einem x86-Computer funktioniert, finden Sie hier einige Anleitungen, die Ihnen bei der Problembehandlung helfen.

Problem Lösung
Ihre App basiert auf einem Treiber, der nicht für Arm konzipiert ist. Kompilieren Sie Ihren x86-Treiber auf Arm64. Siehe Building Arm64 Drivers mit der WDK.
Ihre App ist nur für x64 verfügbar. Wenn Sie für den Microsoft Store entwickeln, übermitteln Sie eine Arm-Version Ihrer App. Weitere Informationen finden Sie unter App-Paketarchitekturen. Wenn Sie ein Win32-Entwickler sind, empfehlen wir, Ihre App auf Arm64 neu zu kompilieren. Weitere Informationen finden Sie in der frühen Vorschau der Visual Studio-Unterstützung für Windows 10 bei der Arm-Entwicklung.
Ihre App verwendet eine OpenGL-Version später als 1.1 oder erfordert hardwarebeschleunigte OpenGL. Verwenden Sie den DirectX-Modus der App, falls sie verfügbar ist. x86-Apps, die DirectX 9, DirectX 10, DirectX 11 und DirectX 12 verwenden, funktionieren auf Arm. Weitere Informationen finden Sie unter DirectX-Grafiken und -Spiele.
Ihre x86-App funktioniert nicht wie erwartet. Versuchen Sie, die Kompatibilitätsproblembehandlung zu verwenden, indem Sie die Anleitung zur Programmkompatibilitätsproblembehandlung auf Arm befolgen. Weitere Schritte zur Problembehandlung finden Sie im Artikel zur Problembehandlung für x86-Apps auf Arm .

Bewährte Methoden für WOW

Ein häufiges Problem tritt auf, wenn eine App feststellt, dass sie unter WOW ausgeführt wird, und dann davon ausgeht, dass sie sich auf einem x64-System befindet. Nach dieser Annahme kann die App folgende Aktionen ausführen:

  • Versuchen Sie, die x64-Version von sich selbst zu installieren, die auf Arm nicht unterstützt wird.
  • Suchen Sie unter der systemeigenen Registrierungsansicht nach anderer Software.
  • Gehen Sie davon aus, dass ein 64-Bit-.NET Framework verfügbar ist.

Im Allgemeinen sollte eine App keine Annahmen über das Hostsystem treffen, wenn sie unter WOW ausgeführt werden soll. Vermeiden Sie die Interaktion mit systemeigenen Komponenten des Betriebssystems so weit wie möglich.

Eine App kann Registrierungsschlüssel in der nativen Registrierungsansicht platzieren oder Funktionen basierend auf dem Vorhandensein von WOW ausführen. Der ursprüngliche IsWow64Process gibt nur an, ob die App auf einem x64-Computer ausgeführt wird. Apps sollten jetzt IsWow64Process2 verwenden, um festzustellen, ob sie auf einem System mit WOW-Unterstützung ausgeführt werden.

Treiber

Alle Kernelmodustreiber, UMDF-Treiber (User-Mode Driver Framework) und Drucktreiber müssen kompiliert werden, um der Architektur des Betriebssystems zu entsprechen. Wenn eine x86-App über einen Treiber verfügt, muss dieser Treiber für Arm64 neu kompiliert werden. Die x86-App kann jedoch unter Emulation einwandfrei ausgeführt werden. Der Treiber muss jedoch für Arm64 neu kompiliert werden, und alle vom Treiber abhängigen Apps sind nicht verfügbar. Weitere Informationen zum Kompilieren Ihres Treibers für Arm64 finden Sie unter Building Arm64 Drivers with the WDK.

-Shellerweiterungen

Apps, die versuchen, Windows-Komponenten zu verbinden oder ihre DLLs in Windows-Prozesse zu laden, müssen diese DLLs neu kompilieren, um der Architektur des Systems zu entsprechen; d. h. Arm64. In der Regel werden diese von Eingabemethoden-Editoren (IMEs), Hilfstechnologien und Shellerweiterungs-Apps verwendet (z. B. zum Anzeigen von Cloudspeichersymbolen im Explorer oder einem Kontextmenü mit der rechten Maustaste). Wenn Sie erfahren möchten, wie Sie Ihre Apps oder DLLs auf Arm64 neu kompilieren, lesen Sie den Blogbeitrag "Early preview of Visual Studio support for Windows 10 on Arm development ".

Debuggen

Weitere Informationen zu Tools und Strategien zum Debuggen auf Arm finden Sie unter "Debuggen auf Arm ", um das Verhalten Ihrer App genauer zu untersuchen.

Virtual Machines

Die Windows Hypervisor-Plattform wird auf der Qualcomm Snapdragon 835 Mobile PC Platform nicht unterstützt. Daher funktioniert das Ausführen virtueller Computer mit Hyper-V nicht. Wir investieren weiterhin in diese Technologien auf zukünftige Qualcomm-Chipsätze.

Dynamische Codegenerierung

X86-Desktop-Apps werden auf Arm64 durch das System emuliert, das Arm64-Anweisungen zur Laufzeit generiert. Dies bedeutet, dass eine x86-Desktop-App die dynamische Codegenerierung oder -änderung im Prozess verhindert, dass diese App nicht als x86 auf Arm64 ausgeführt werden kann.

Dies ist eine Sicherheitsminderung, die einige Apps für ihren Prozess mithilfe der SetProcessMitigationPolicy-API mit dem ProcessDynamicCodePolicy Flag aktivieren. Um als x86-Prozess erfolgreich auf Arm64 ausgeführt zu werden, muss diese Entschärfungsrichtlinie deaktiviert werden.