Risoluzione dei problemi relativi alle app desktop x86Troubleshooting x86 desktop apps

Importante

ARM64 SDK è ora disponibile come parte di Visual Studio 15,8 Preview 1.The ARM64 SDK is now available as part of Visual Studio 15.8 Preview 1. Si consiglia di ricompilare l'app in ARM64 in modo che l'app venga eseguita a una velocità nativa completa.We recommend that you recompile your app to ARM64 so that your app runs at full native speed. Per altre informazioni, vedere il post di Blog sull'anteprima del supporto di Visual Studio per Windows 10 nel servizio di sviluppo ARM .For more info, see the Early preview of Visual Studio support for Windows 10 on ARM development blog post.

Se un'app desktop x86 non funziona in modo corretto in un computer x86, di seguito sono riportate alcune indicazioni utili per la risoluzione dei problemi.If an x86 desktop app doesn't work the way it does on an x86 machine, here's some guidance to help you troubleshoot.

ProblemaIssue SoluzioneSolution
L'app si basa su un driver non progettato per ARM.Your app relies on a driver that isn't designed for ARM. Ricompilare il driver x86 in ARM64.Recompile your x86 driver to ARM64. Vedere compilazione di driver arm64 con WDK.See Building ARM64 Drivers with the WDK.
L'app è disponibile solo per x64.Your app is available only for x64. Se si sviluppa per Microsoft Store, inviare una versione dell'app ARM.If you develop for Microsoft Store, submit an ARM version of your app. Per altre informazioni, vedere architetture del pacchetto dell'app.For more info, see App package architectures. Se si è uno sviluppatore Win32, è consigliabile ricompilare l'app in ARM64.If you're a Win32 developer, we recommend you recompile your app to ARM64. Per altre informazioni, vedere la pagina relativa all'anteprima del supporto di Visual Studio per Windows 10 sullo sviluppo ARM.For more info see Early preview of Visual Studio support for Windows 10 on ARM development.
L'app usa una versione di OpenGL successiva alla 1,1 o richiede OpenGL con accelerazione hardware.Your app uses an OpenGL version later than 1.1 or requires hardware-accelerated OpenGL. Usare la modalità DirectX dell'app, se disponibile.Use the DirectX mode of the app, if it's available. le app x86 che usano DirectX 9, DirectX 10, DirectX 11 e DirectX 12 funzioneranno su ARM.x86 apps that use DirectX 9, DirectX 10, DirectX 11, and DirectX 12 will work on ARM. Per altre informazioni, vedere grafica e giochi DirectX.For more info, see DirectX Graphics and Gaming.
L'app x86 non funziona come previsto.Your x86 app does not work as expected. Provare a usare lo strumento di risoluzione dei problemi di compatibilità seguendo le istruzioni di risoluzione dei problemi di compatibilità dei programmi su ARM.Try using the Compatibility Troubleshooter by following guidance from Program Compatibility Troubleshooter on ARM. Per altre procedure di risoluzione dei problemi, vedere l'articolo risoluzione dei problemi delle app x86 su ARM .For some other troubleshooting steps, see the Troubleshooting x86 apps on ARM article.

Procedure consigliate per WOWBest practices for WOW

Un problema comune si verifica quando un'app rileva che viene eseguita con WOW, quindi presuppone che si trovi in un sistema x64.One common problem occurs when an app discovers that it's running under WOW and then assumes that it is on an x64 system. Avendo preso in considerazione questo presupposto, l'app può eseguire le operazioni seguenti:Having made this assumption, the app may do the following:

  • Provare a installare la versione x64 di se stessa, che non è supportata in ARM.Try to install the x64 version of itself, which isn't supported on ARM.
  • Verificare la presenza di altro software nella visualizzazione del registro di sistema nativo.Check for other software under the native registry view.
  • Si supponga che sia disponibile un .NET Framework a 64 bit.Assume that a 64-bit .NET framework is available.

In genere, un'app non deve fare supposizioni sul sistema host quando viene determinata l'esecuzione con WOW.Generally, an app should not make assumptions about the host system when it is determined to run under WOW. Evitare il più possibile l'interazione con i componenti nativi del sistema operativo.Avoid interacting with native components of the OS as much as possible.

Un'app può inserire chiavi del registro di sistema nella visualizzazione nativa del registro di sistema o eseguire funzioni in base alla presenza di WOW.An app may place registry keys under the native registry view, or perform functions based on the presence of WOW. Il IsWow64Process originale indica solo se l'app è in esecuzione in un computer x64.The original IsWow64Process indicates only whether the app is running on an x64 machine. Le app dovrebbero ora usare IsWow64Process2 per determinare se sono in esecuzione in un sistema con supporto WOW.Apps should now use IsWow64Process2 to determine whether they're running on a system with WOW support.

DriverDrivers

Tutti i driver in modalità kernel, i driver UMDF (User-Mode Driver Framework) e i driver di stampa devono essere compilati in base all'architettura del sistema operativo.All kernel-mode drivers, User-Mode Driver Framework (UMDF) drivers, and print drivers must be compiled to match the architecture of the OS. Se un'app x86 ha un driver, il driver deve essere ricompilato per ARM64.If an x86 app has a driver, then that driver must be recompiled for ARM64. L'app x86 può essere eseguita correttamente in emulazione, tuttavia, il driver deve essere ricompilato per ARM64 e qualsiasi esperienza di app che dipende dal driver non sarà disponibile.The x86 app may run fine under emulation however, its driver will need to be recompiled for ARM64 and any app experience that depends on the driver will not be available. Per ulteriori informazioni sulla compilazione del driver per ARM64, vedere la pagina relativa alla compilazione di driver arm64 con WDK.For more info about compiling your driver for ARM64, see Building ARM64 Drivers with the WDK.

Estensioni della shell inShell extensions

Le app che tentano di associare i componenti di Windows o caricare le dll nei processi di Windows dovranno ricompilare tali DLL in modo che corrispondano all'architettura del sistema. ad esempio ARM64.Apps that try to hook Windows components or load their DLLs into Windows processes will need to recompile those DLLs to match the architecture of the system; i.e. ARM64. In genere, vengono usati dagli IME (Input Method Editor), dalle tecnologie per l'accessibilità e dalle app di estensione della shell, ad esempio per visualizzare le icone di archiviazione cloud in Esplora o il menu di scelta rapida.Typically, these are used by input method editors (IMEs), assistive technologies, and shell extension apps (for example, to show cloud storage icons in Explorer or a right click Context menu). Per informazioni su come ricompilare le app o le dll in ARM64, vedere il post di Blog relativo all' anteprima del supporto di Visual Studio per Windows 10 nel servizio di sviluppo ARM .To learn how to recompile your apps or DLLs to ARM64, see the Early preview of Visual Studio support for Windows 10 on ARM development blog post.

DebugDebugging

Per esaminare il comportamento dell'app in modo più approfondito, vedere debug su ARM per altre informazioni sugli strumenti e sulle strategie per il debug su ARM.To investigate your app's behavior in more depth, see Debugging on ARM to learn more about tools and strategies for debugging on ARM.

Macchine virtualiVirtual Machines

La piattaforma Windows Hypervisor non è supportata nella piattaforma per PC portatili Qualcomm bocc 835.The Windows Hypervisor platform is not supported on the Qualcomm Snapdragon 835 Mobile PC Platform. Di conseguenza, le macchine virtuali in esecuzione che usano Hyper-V non funzioneranno.Hence, running virtual machines using Hyper-V will not work. Gli investimenti in queste tecnologie continueranno a essere effettuati nei futuri chipset Qualcomm.We continue to make investments in these technologies on future Qualcomm chipsets.

Generazione dinamica di codiceDynamic Code Generation

Le app desktop x86 sono emulate in ARM64 dal sistema che genera istruzioni ARM64 in fase di esecuzione.X86 desktop apps are emulated on ARM64 by the system generating ARM64 instructions at runtime. Ciò significa che se un'app desktop x86 impedisce la generazione o la modifica di codice dinamico nel processo, l'app non può essere supportata per l'esecuzione come x86 in ARM64.This means if an x86 desktop app prevents dynamic code generation or modification in its process, that app cannot be supported to run as x86 on ARM64.

Si tratta di una mitigazione della sicurezza che alcune app abilitano sul proprio processo usando l'API SetProcessMitigationPolicy con il ProcessDynamicCodePolicy flag.This is a security mitigation some apps enable on their process using SetProcessMitigationPolicy API with the ProcessDynamicCodePolicy flag. Per eseguire correttamente in ARM64 come processo x86, è necessario disabilitare questo criterio di mitigazione.To run successfully on ARM64 as an x86 process, this mitigation policy will have to be disabled.