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 velocidad nativa completa. Para obtener más información sobre la compilación como Arm64, consulta la entrada de blog: Compatibilidad oficial con Windows 10 en el desarrollo de Arm. Para obtener información sobre Arm64EC, consulte Anuncio de Arm64EC: Creación de 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 que le ayudarán 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 Building Arm64 Drivers with the WDK (Creación de controladores arm64 con WDK).
La aplicación solo está disponible para x64. Si desarrollas para Microsoft Store, envía una versión de Arm de tu aplicación. Para obtener más información, consulta Arquitecturas de paquetes de aplicaciones. Si eres un desarrollador de Win32, te recomendamos que vuelvas a compilar la aplicación en Arm64. Para obtener más información, consulta Versión preliminar temprana 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 Gráficos y juegos de DirectX.
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 nativo.
  • 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 en WOW. Evite interactuar con 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 en 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 deberá 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 con el botón derecho). Para obtener información sobre cómo volver a compilar las aplicaciones o archivos DLL en Arm64, consulte la entrada de blog 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 las herramientas y estrategias para la depuración en Arm.

Virtual Machines

La plataforma de Hipervisor de Windows no es compatible con la Plataforma Qualcomm Qualcomm Mobile PC Platform 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 chipsets 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 de código dinámico o la modificación en su proceso, esa aplicación no se puede ejecutar como x86 en Arm64.

Se trata de una mitigación de seguridad que algunas aplicaciones habilitan en su proceso mediante la API SetProcessMitigationPolicy con la ProcessDynamicCodePolicy marca . Para ejecutarse correctamente en Arm64 como proceso x86, esta directiva de mitigación tendrá que deshabilitarse.