Risoluzione dei problemi delle applicazioni desktop x86
Importante
Con Visual Studio 2017 o successivo, è possibile ricompilare la tua app su Arm64 o Arm64EC in modo che la tua app venga eseguita alla massima velocità nativa. Per maggiori informazioni sulla compilazione come Arm64, consulta il post sul blog: Supporto ufficiale per lo sviluppo di Windows 10 su Arm. Per informazioni su Arm64EC, consulta il sito Annunciando Arm64EC: Costruire applicazioni native e interoperabili per Windows 11 su Arm.
Se un'applicazione desktop x86 non funziona come su un computer x86, ecco alcune indicazioni per aiutarti a risolvere il problema.
Problema | Soluzione |
---|---|
La tua applicazione si basa su un driver che non è stato progettato per Arm. | Ricompila il driver x86 in Arm64. Vedi Costruire i driver Arm64 con il WDK. |
La tua applicazione è disponibile solo per x64. | Se sviluppi per il Microsoft Store, invia una versione Arm della tua applicazione. Per maggiori informazioni, vedi Architetture dei pacchetti di applicazioni. Se sei uno sviluppatore Win32, ti consigliamo di ricompilare la tua applicazione per Arm64. Per ulteriori informazioni, consultare Anteprima del supporto di Visual Studio per lo sviluppo di Windows 10 su Arm. |
La tua applicazione utilizza una versione di OpenGL successiva alla 1.1 o richiede OpenGL con accelerazione hardware. | Usa la modalità DirectX dell'applicazione, se disponibile. le applicazioni x86 che utilizzano DirectX 9, DirectX 10, DirectX 11 e DirectX 12 funzionano su Arm. Per maggiori informazioni, consulta DirectX Graphics and Gaming. |
La tua applicazione x86 non funziona come previsto. | Prova a utilizzare il programma di risoluzione dei problemi di compatibilità seguendo la guida di Programma di risoluzione dei problemi di compatibilità su Arm. Per altri passi di risoluzione dei problemi, consulta l'articolo Risoluzione dei problemi delle applicazioni x86 su Arm . |
Le migliori pratiche per WOW
Un problema comune si verifica quando un'applicazione scopre che sta girando sotto WOW e quindi presume di essere su un sistema x64. Una volta fatta questa premessa, l'applicazione può fare quanto segue:
- Prova a installare la versione x64 di se stesso, che non è supportata su Arm.
- Controlla la presenza di altri software nella vista del registro nativo.
- Supponiamo che sia disponibile un framework .NET a 64 bit.
In generale, un'applicazione non deve fare supposizioni sul sistema host quando si stabilisce che deve essere eseguita sotto WOW. Evita il più possibile di interagire con i componenti nativi del sistema operativo.
Un'applicazione può inserire chiavi di registro nella vista del registro nativo o eseguire funzioni basate sulla presenza di WOW. L'originale IsWow64Process indica solo se l'applicazione è in esecuzione su una macchina x64. Le applicazioni dovrebbero ora utilizzare IsWow64Process2 per determinare se sono in esecuzione su un sistema con supporto WOW.
Driver
Tutti i driver in modalità kernel, i driver User-Mode Driver Framework (UMDF) e i driver di stampa devono essere compilati per adattarsi all'architettura del sistema operativo. Se un'applicazione x86 ha un driver, questo deve essere ricompilato per Arm64. L'applicazione x86 può funzionare bene in emulazione, ma il suo driver dovrà essere ricompilato per Arm64 e tutte le applicazioni che dipendono dal driver non saranno disponibili. Per maggiori informazioni sulla compilazione del driver per Arm64, consulta Costruire driver Arm64 con il WDK.
Estensioni della shell in
Le applicazioni che cercano di agganciare i componenti di Windows o di caricare le loro DLL nei processi di Windows dovranno ricompilare le DLL per adattarle all'architettura del sistema, cioè Arm64. In genere, sono utilizzati dagli editor di metodi di input (IME), dalle tecnologie assistive e dalle applicazioni di estensione della shell (ad esempio, per mostrare le icone del cloud storage in Explorer o il menu contestuale del tasto destro del mouse). Per sapere come ricompilare le tue applicazioni o DLL per Arm64, consulta il post del blog Anteprima del supporto di Visual Studio per lo sviluppo di Windows 10 su Arm .
Debug
Per approfondire il comportamento della tua applicazione, consulta Debugging on Arm per saperne di più sugli strumenti e le strategie di debug su Arm.
Macchine virtuali
La piattaforma Windows Hypervisor non è supportata dalla piattaforma Qualcomm Snapdragon 835 Mobile PC. Pertanto, l'esecuzione di macchine virtuali con Hyper-V non funzionerà. Continuiamo a investire in queste tecnologie sui futuri chipset Qualcomm.
Generazione dinamica del codice
Le applicazioni desktop X86 sono emulate su Arm64 dal sistema che genera istruzioni Arm64 in fase di esecuzione. Ciò significa che se un'applicazione desktop x86 impedisce la generazione o la modifica di codice dinamico nel suo processo, tale applicazione non può essere supportata per essere eseguita come x86 su Arm64.
Si tratta di una mitigazione della sicurezza che alcune applicazioni abilitano sui loro processi utilizzando l'API SetProcessMitigationPolicy con il flag ProcessDynamicCodePolicy
. Per funzionare correttamente su Arm64 come processo x86, questa politica di mitigazione dovrà essere disabilitata.