Устранение неполадок классических приложений x86
Внимание
С помощью Visual Studio 2017 или более поздней версии можно перекомпилировать приложение в Arm64 или Arm64EC, чтобы приложение выполнялось на полной скорости. Дополнительные сведения о компиляции в качестве Arm64 см. в записи блога: официальная поддержка Windows 10 для разработки Arm. Дополнительные сведения о Arm64EC см. в статье "Объявление о arm64EC: создание собственных и совместимых приложений для Windows 11 в Arm".
Если классическое приложение x86 не работает так, как оно выполняется на компьютере x86, вот некоторые рекомендации, которые помогут вам устранить неполадки.
Проблема | Решение |
---|---|
Приложение использует драйвер, который не предназначен для Arm. | Перекомпилируйте драйвер x86 в Arm64. См. статью "Создание драйверов Arm64 с помощью WDK". |
Приложение доступно только для x64. | Если вы разрабатываете для Microsoft Store, отправьте версию Arm приложения. Дополнительные сведения см. в разделе "Архитектура пакетов приложений". Если вы являетесь разработчиком Win32, рекомендуется перекомпилировать приложение в Arm64. Дополнительные сведения см. в начале предварительной версии поддержки Visual Studio для Windows 10 для разработки Arm. |
Приложение использует версию OpenGL более 1.1 или требует аппаратного ускорения OpenGL. | Используйте режим DirectX приложения, если он доступен. Приложения x86, использующие DirectX 9, DirectX 10, DirectX 11 и DirectX 12 будут работать в Arm. Дополнительные сведения см. в статье DirectX Graphics and Gaming. |
Приложение x86 не работает должным образом. | Попробуйте использовать средство устранения неполадок совместимости, следуя инструкциям из средства устранения неполадок совместимости программы на Arm. Дополнительные действия по устранению неполадок см . в статье об устранении неполадок приложений x86 в Arm . |
Рекомендации по WOW
Одна из распространенных проблем возникает, когда приложение обнаруживает, что оно работает в WOW, а затем предполагает, что оно находится в системе x64. Сделав это предположение, приложение может сделать следующее:
- Попробуйте установить саму версию x64, которая не поддерживается в Arm.
- Проверьте наличие другого программного обеспечения в собственном представлении реестра.
- Предположим, что доступна 64-разрядная платформа .NET.
Как правило, приложение не должно делать предположений о системе узла, когда она определена для запуска в WOW. Избегайте взаимодействия с собственными компонентами ОС как можно больше.
Приложение может размещать разделы реестра в собственном представлении реестра или выполнять функции на основе наличия WOW. Исходный IsWow64Process указывает, работает ли приложение на компьютере x64. Теперь приложения должны использовать IsWow64Process2 , чтобы определить, работают ли они в системе с поддержкой WOW.
Драйверы
Все драйверы в режиме ядра, драйверы среда выполнения платформы драйвера режима пользователя (UMDF) и драйверы печати должны быть скомпилированы для сопоставления архитектуры ОС. Если у приложения x86 есть драйвер, этот драйвер должен быть перекомпилирован для Arm64. Приложение x86 может работать нормально при эмуляции, однако его драйвер должен быть перекомпилирован для Arm64, и любой интерфейс приложения, который зависит от драйвера, не будет доступен. Дополнительные сведения о компиляции драйвера для Arm64 см. в статье "Создание драйверов Arm64 с помощью WDK".
Расширения оболочки
Приложения, которые пытаются подключить компоненты Windows или загрузить их библиотеки DLL в процессы Windows, потребуется перекомпилировать эти библиотеки DLL, чтобы соответствовать архитектуре системы; т. е. Arm64. Как правило, они используются редакторами методов ввода (IMEs), вспомогательными технологиями и приложениями расширения оболочки (например, для отображения значков облачного хранилища в обозревателе или контекстном меню). Чтобы узнать, как перекомпилировать приложения или библиотеки DLL в Arm64, ознакомьтесь с ранней предварительной версией поддержки Visual Studio для Windows 10 в блоге о разработке Arm.
Отладка
Чтобы более подробно изучить поведение приложения, ознакомьтесь с разделом "Отладка в Arm", чтобы узнать больше о средствах и стратегиях отладки в Arm .
Виртуальные машины
Платформа Гипервизора Windows не поддерживается на платформе Мобильных пк Qualcomm Snapdl 835 Mobile. Поэтому запуск виртуальных машин с помощью Hyper-V не будет работать. Мы продолжаем инвестировать в эти технологии на будущие чипсеты Qualcomm.
Динамическое создание кода
Классические приложения X86 эмулируются в Arm64 системой, создающей инструкции Arm64 во время выполнения. Это означает, что если классическое приложение x86 предотвращает создание или изменение динамического кода в процессе, это приложение не может поддерживаться как x86 в Arm64.
Это устранение рисков безопасности для некоторых приложений, которые позволяют включить их процесс с помощью API SetProcessMitigationPolicy с флагом ProcessDynamicCodePolicy
. Чтобы успешно работать в Arm64 в качестве процесса x86, эта политика устранения рисков должна быть отключена.
Windows on Arm