Solución de problemas de aplicaciones de escritorio x86
Importante
Con Visual Studio 2017 o posterior, es posible volver a compilar la aplicación en Arm64 o Arm64EC para que la aplicación se ejecute a toda velocidad nativa. Para obtener más información sobre la compilación como Arm64, consulta la entrada de blog: Compatibilidad oficial con Windows 10 en desarrollo de Arm. Para obtener información sobre Arm64EC, consulta Anuncio de Arm64EC: Compilar aplicaciones nativas e interoperables para Windows 11 en Arm.
Si una aplicación de escritorio x86 no funciona como lo hace en una máquina x86, estas son algunas instrucciones para ayudarle a solucionar problemas.
Problema | Solución |
---|---|
La aplicación se basa en un controlador que no está diseñado para Arm. | Vuelva a compilar el controlador x86 en Arm64. Consulte Creación de controladores Arm64 con el WDK. |
La aplicación solo está disponible para x64. | Si desarrollas para Microsoft Store, envía una versión arm de tu aplicación. Para obtener más información, consulta Arquitecturas de paquetes de aplicaciones. Si eres desarrollador de Win32, te recomendamos que vuelvas a compilar la aplicación en Arm64. Para obtener más información, consulta Versión preliminar anticipada de la compatibilidad de Visual Studio con Windows 10 en el desarrollo de Arm. |
La aplicación usa una versión de OpenGL posterior a la 1.1 o requiere OpenGL acelerado por hardware. | Use el modo DirectX de la aplicación, si está disponible. Las aplicaciones x86 que usan DirectX 9, DirectX 10, DirectX 11 y DirectX 12 funcionarán en Arm. Para obtener más información, consulta DirectX Graphics and Gaming. |
La aplicación x86 no funciona según lo previsto. | Pruebe a usar el solucionador de problemas de compatibilidad siguiendo las instrucciones del Solucionador de problemas de compatibilidad del programa en Arm. Para ver otros pasos de solución de problemas, consulte el artículo Solución de problemas de aplicaciones x86 en Arm . |
Procedimientos recomendados para WOW
Un problema común se produce cuando una aplicación detecta que se ejecuta en WOW y, a continuación, supone que está en un sistema x64. Después de realizar esta suposición, la aplicación puede hacer lo siguiente:
- Intente instalar la versión x64 de sí misma, que no se admite en Arm.
- Busque otro software en la vista del Registro nativa.
- Supongamos que hay disponible un marco de .NET de 64 bits.
Por lo general, una aplicación no debe realizar suposiciones sobre el sistema host cuando se determina que se ejecuta bajo WOW. Evite interactuar con los componentes nativos del sistema operativo tanto como sea posible.
Una aplicación puede colocar claves del Registro en la vista del Registro nativa o realizar funciones basadas en la presencia de WOW. El IsWow64Process original indica solo si la aplicación se ejecuta en una máquina x64. Las aplicaciones ahora deben usar IsWow64Process2 para determinar si se ejecutan en un sistema con compatibilidad con WOW.
Controladores
Todos los controladores del modo kernel, los controladores del marco de controladores del modo de usuario (UMDF) y los controladores de impresión deben compilarse para que coincidan con la arquitectura del sistema operativo. Si una aplicación x86 tiene un controlador, ese controlador debe volver a compilarse para Arm64. La aplicación x86 puede ejecutarse correctamente en la emulación, pero su controlador tendrá que volver a compilarse para Arm64 y cualquier experiencia de aplicación que dependa del controlador no estará disponible. Para obtener más información sobre cómo compilar el controlador para Arm64, consulta Building Arm64 Drivers with the WDK (Creación de controladores arm64 con WDK).
Extensiones de Shell de :
Las aplicaciones que intentan enlazar componentes de Windows o cargar sus archivos DLL en procesos de Windows tendrán que volver a compilar esos archivos DLL para que coincidan con la arquitectura del sistema; Es decir, Arm64. Normalmente, los editores de métodos de entrada (IME), las tecnologías de asistencia y las aplicaciones de extensión de shell (por ejemplo, para mostrar iconos de almacenamiento en la nube en el Explorador o un menú contextual). Para obtener información sobre cómo volver a compilar las aplicaciones o archivos DLL en Arm64, consulte la entrada de blog Early preview of Visual Studio support for Windows 10 on Arm development (Versión preliminar temprana de la compatibilidad de Visual Studio con Windows 10 en desarrollo de Arm).
Depuración
Para investigar el comportamiento de la aplicación en mayor profundidad, consulte Depuración en Arm para obtener más información sobre herramientas y estrategias para la depuración en Arm.
Virtual Machines
La plataforma de Hipervisor de Windows no es compatible con la Plataforma de PC Móvil Qualcomm Qualcomm 835. Por lo tanto, la ejecución de máquinas virtuales con Hyper-V no funcionará. Seguimos realizando inversiones en estas tecnologías en futuros conjuntos de chips Qualcomm.
Generación de código dinámico
Las aplicaciones de escritorio X86 se emulan en Arm64 mediante el sistema que genera instrucciones de Arm64 en tiempo de ejecución. Esto significa que si una aplicación de escritorio x86 impide la generación o modificación dinámicas de código en su proceso, esa aplicación no se puede admitir para ejecutarse como x86 en Arm64.
Se trata de una mitigación de seguridad que algunas aplicaciones habilitan en su proceso mediante setProcessMitigationPolicy API con la ProcessDynamicCodePolicy
marca . Para ejecutarse correctamente en Arm64 como proceso x86, esta directiva de mitigación tendrá que deshabilitarse.