Udostępnij przez


Rozwiązywanie problemów z aplikacjami klasycznymi x86

Ważne

W programie Visual Studio 2017 lub nowszym możesz ponownie skompilować aplikację dla platformy Arm64 lub Arm64EC, aby aplikacja działała z pełną szybkością natywną. Aby uzyskać więcej informacji na temat kompilowania jako Arm64, zobacz wpis na blogu: Oficjalne wsparcie dla Windows 10 przy programowaniu na platformie Arm. Aby uzyskać informacje o architekturze Arm64EC, zobacz Ogłaszanie Arm64EC: Tworzenie aplikacji natywnych i interoperacyjnych dla systemu Windows 11 na platformie Arm.

Jeśli aplikacja klasyczna x86 nie działa tak, jak działa na maszynie x86, skorzystaj z poniższych wskazówek, aby ułatwić rozwiązywanie problemów.

Problematyka Rozwiązanie
Aplikacja opiera się na sterowniku, który nie jest przeznaczony dla architektury Arm. Ponownie skompiluj sterownik x86 do arm64. Zobacz Kompilowanie sterowników Arm64 przy użyciu WDK.
Aplikacja jest dostępna tylko dla wersji x64. Jeśli tworzysz aplikację dla Microsoft Store, prześlij wersję ARM swojej aplikacji. Aby uzyskać więcej informacji, zobacz Architektury pakietów aplikacji. Jeśli jesteś deweloperem Win32, ponownie skompiluj swoją aplikację dla Arm64. Aby uzyskać więcej informacji, zobacz wczesną wersję zapoznawcza obsługi programu Visual Studio dla systemu Windows 10 w programie Arm development.
Aplikacja używa wersji OpenGL nowszej niż 1.1 lub wymaga przyspieszonej sprzętowo biblioteki OpenGL. Użyj trybu DirectX aplikacji, jeśli jest dostępny. Aplikacje x86 korzystające z DirectX 9, DirectX 10, DirectX 11 i DirectX 12 działają na Arm. Aby uzyskać więcej informacji, zobacz DirectX Graphics and Gaming.
Aplikacja x86 nie działa zgodnie z oczekiwaniami. Spróbuj użyć narzędzia do rozwiązywania problemów ze zgodnością, postępując zgodnie ze wskazówkami narzędzia do rozwiązywania problemów ze zgodnością programów na platformie Arm. Inne kroki rozwiązywania problemów można znaleźć w artykule Troubleshooting x86 apps on Arm (Rozwiązywanie problemów z aplikacjami x86 w usłudze Arm).

Najlepsze rozwiązania dotyczące systemu WOW

Jeden z typowych problemów występuje, gdy aplikacja wykryje, że działa w obszarze WOW, a następnie zakłada, że znajduje się w systemie x64. Zgodnie z tym założeniem aplikacja może wykonywać następujące czynności:

  • Spróbuj zainstalować samą wersję x64, która nie jest obsługiwana w usłudze Arm.
  • Sprawdź inne oprogramowanie w widoku rejestru natywnego.
  • Załóżmy, że dostępna jest 64-bitowa platforma .NET Framework.

Ogólnie rzecz biorąc, aplikacja nie powinna zakładać nic o systemie hosta, gdy ma zostać uruchomiona w środowisku WOW. Unikaj interakcji z natywnymi składnikami systemu operacyjnego, jak najwięcej.

Aplikacja może umieścić klucze rejestru w widoku rejestru natywnego lub wykonywać funkcje na podstawie obecności WOW. Oryginalny IsWow64Process wskazuje tylko, czy aplikacja jest uruchomiona na maszynie x64. Aplikacje powinny teraz używać IsWow64Process2, aby określić, czy są uruchomione w systemie z obsługą WOW.

Sterowniki

Wszystkie sterowniki trybu jądra, sterowniki User-Mode Driver Framework (UMDF) i sterowniki wydruku muszą być skompilowane w celu dopasowania do architektury systemu operacyjnego. Jeśli aplikacja x86 ma sterownik, należy ponownie skompilować ten sterownik dla arm64. Aplikacja x86 może działać prawidłowo w ramach emulacji; należy jednak ponownie skompilować jego sterownik dla usługi Arm64 i wszelkie środowisko aplikacji, które zależy od sterownika, nie jest dostępne. Aby uzyskać więcej informacji na temat kompilowania sterownika dla arm64, zobacz Building Arm64 Drivers with the WDK.

Rozszerzenia powłoki

Aplikacje, które próbują podłączyć składniki systemu Windows lub załadować ich biblioteki DLL do procesów systemu Windows, muszą ponownie skompilować te biblioteki DLL w celu dopasowania ich do architektury systemu, takiej jak Arm64. Zazwyczaj edytory metod wejściowych (IME), technologie pomocnicze i aplikacje rozszerzeń powłoki używają tych bibliotek DLL. Na przykład te aplikacje wyświetlają ikony przechowywania w chmurze w Eksploratorze lub menu kontekstowym. Aby dowiedzieć się, jak ponownie skompilować aplikacje lub biblioteki DLL do arm64, zobacz wpis na blogu o wczesnej wersji zapoznawczej obsługi programu Visual Studio dla systemu Windows 10 na platformie Arm .

Debugowanie

Aby dokładniej zbadać zachowanie aplikacji, zobacz Debugowanie w usłudze Arm, aby dowiedzieć się więcej o narzędziach i strategiach debugowania w usłudze Arm.

Maszyny wirtualne

Platforma Hypervisor systemu Windows nie jest obsługiwana na platformie Komputerów Przenośnych Qualcomm 835. W związku z tym uruchamianie maszyn wirtualnych przy użyciu Hyper-V nie działa. Nadal wprowadzamy inwestycje w te technologie na przyszłych mikroukładach Qualcomm.

Generowanie kodu dynamicznego

System emuluje aplikacje klasyczne x86 na platformie Arm64, generując instrukcje arm64 w czasie wykonywania. Ta emulacja nie obsługuje aplikacji klasycznej x86, która uniemożliwia dynamiczne generowanie lub modyfikowanie kodu w procesie.

To ograniczenie zabezpieczeń jest włączone w procesach niektórych aplikacji przy użyciu interfejsu API SetProcessMitigationPolicy z flagą ProcessDynamicCodePolicy . Aby pomyślnie uruchomić usługę Arm64 jako proces x86, należy wyłączyć te zasady ograniczania ryzyka.