Freigeben über


Problembehandlung bei x86-Desktop-Apps

Von Bedeutung

Mit Visual Studio 2017 oder höher können Sie Ihre App auf Arm64 oder Arm64EC neu kompilieren, sodass Ihre App mit voller systemeigener Geschwindigkeit ausgeführt wird. Weitere Informationen zum Kompilieren als Arm64 finden Sie im Blogbeitrag: Offizielle Unterstützung für Windows 10 für die Arm-Entwicklung. Informationen zu Arm64EC finden Sie unter Ankündigung von Arm64EC: Entwicklung nativer und interoperabler Apps für Windows 11 auf Arm.

Wenn eine x86-Desktop-App nicht so funktioniert, wie sie auf einem x86-Computer funktioniert, verwenden Sie die folgenden Anleitungen, um Sie bei der Problembehandlung zu unterstützen.

Thema Lösung
Ihre App basiert auf einem Treiber, der nicht für Arm konzipiert ist. Rekompilieren Sie Ihren x86-Treiber für Arm64. Siehe Erstellen von Arm64-Treibern mit dem 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, kompilieren Sie Ihre App auf Arm64. Weitere Informationen finden Sie im frühen Einblick der Visual Studio-Unterstützung für Windows 10 auf 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, laufen auf Arm. Weitere Informationen finden Sie unter DirectX-Grafiken und -Spiele.
Ihre x86-App funktioniert nicht wie erwartet. Versuchen Sie, das Kompatibilitätsproblembehandlungstool zu verwenden, indem Sie den Anleitungen von Programmkompatibilitätsbehandlung auf Armfolgen. 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. Bei dieser Annahme kann die App die folgenden 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. Das ursprüngliche IsWow64Process gibt nur an, ob die Anwendung 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.

Fahrer

Alle Kernelmodustreiber, User-Mode Driver Framework (UMDF) Treiber und Drucktreiber müssen kompiliert werden, um der Architektur des Betriebssystems zu entsprechen. Wenn eine x86-App über einen Treiber verfügt, müssen Sie diesen Treiber für Arm64 neu kompilieren. Die x86-App kann unter Emulation einwandfrei ausgeführt werden; Sie müssen jedoch den Treiber für Arm64 neu kompilieren, 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.

Shell-Erweiterungen

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, z. B. Arm64, zu entsprechen. In der Regel verwenden Eingabemethoden-Editoren (IMEs), Hilfstechnologien und Shellerweiterungs-Apps diese DLLs. Diese Apps zeigen beispielsweise Cloudspeichersymbole im Explorer oder ein Kontextmenü mit der rechten Maustaste an. Informationen zum Erneuten Kompilieren Ihrer Apps oder DLLs zu Arm64 finden Sie in der Early Preview der Visual Studio-Unterstützung für Windows 10 für die Arm-Entwicklung Blogbeitrag.

Fehlersuche

Um das Verhalten Ihrer App eingehender zu analysieren, lesen Sie Debuggen auf Arm, um mehr über Tools und Strategien für das Debuggen auf Arm zu erfahren.

Virtuelle Computer

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

Dynamische Codegenerierung

Das System emuliert x86-Desktop-Apps auf Arm64 durch Generieren von Arm64-Anweisungen zur Laufzeit. Diese Emulation unterstützt keine x86-Desktop-App, die die dynamische Codegenerierung oder -änderung im Prozess verhindert.

Diese Sicherheitsmaßnahme ist für einige App-Prozesse aktiviert, indem die SetProcessMitigationPolicy-API durch die Verwendung des Flags ProcessDynamicCodePolicy aktiviert wird. Zum erfolgreichen Ausführen von Arm64 als x86-Prozess müssen Sie diese Entschärfungsrichtlinie deaktivieren.