Устранение неполадок в классических приложениях x86

Важно!

В Visual Studio 2017 или более поздней версии приложение можно перекомпилировать в Arm64 или Arm64EC, чтобы приложение выполнялось с полной скоростью. Дополнительные сведения о компиляции как Arm64 см. в записи блога Официальная поддержка Windows 10 в разработке для Arm. Сведения об Arm64EC см. в статье Объявление о создании собственных и совместимых приложений для Windows 11 в Arm.

Если классическое приложение x86 не работает так, как на компьютере x86, вот несколько советов по диагностике неполадок.

Проблема Решение
Ваше приложение зависит от драйвера, который не предназначен для Arm. Перекомпилируйте драйвер x86 в Arm64. См. статью Создание драйверов Arm64 с помощью WDK.
Ваше приложение доступно только для версии x64. Если вы разрабатываете для Microsoft Store, отправьте версию приложения Arm. Дополнительные сведения см. в разделе Архитектуры пакета приложения. Если вы разработчик Win32, мы рекомендуем перекомпилировать приложение в Arm64. Дополнительные сведения см. в статье Ранняя предварительная версия поддержки Visual Studio для Windows 10 на arm development.
Ваше приложение использует версию OpenGL выше 1.1 или требует OpenGL с аппаратным ускорением. Используйте режим приложения DirectX, если доступно. Приложения x86, использующие DirectX 9, DirectX 10, DirectX 11 и DirectX 12, будут работать в Arm. Дополнительные сведения см. в разделе Графика и игры DirectX.
Приложение x86 не работает должным образом. Попробуйте использовать средство устранения неполадок совместимости, следуя указаниям в средстве устранения неполадок с совместимостью программ на arm. Дополнительные действия по устранению неполадок см. в статье Устранение неполадок приложений x86 в Arm .

Рекомендации по WOW

Распространенная проблема возникает, когда приложение обнаруживает, что работает в WOW, а затем предполагает, что находится в системе x64. Сделав это предположение, приложение может сделать следующее:

  • Попробуйте установить саму версию x64, которая не поддерживается в Arm.
  • Проверить наличие другого ПО в собственном представлении реестра.
  • Предположить, что доступна 64-разрядная платформа .NET Framework.

Как правило, приложение не должно делать никаких предположений о системе, в которой оно размещено, если оно предназначено для работы в WOW. Старайтесь не взаимодействовать со встроенными компонентами ОС.

Приложение может поместить разделы реестра в собственное представление реестра или выполнить функции, исходя из присутствия WOW. Исходный isWow64Process указывает только, запущено ли приложение на компьютере x64. Теперь приложения должны использовать параметр IsWow64Process2, чтобы определить, работают ли они в системе с поддержкой WOW.

драйверы,

Все работающие в режиме ядра драйверы, драйверы среды выполнения платформы драйвера режима пользователя (UMDF) и драйверы печати необходимо скомпилировать в соответствии с особенностью архитектуры ОС. Если в приложении x86 есть драйвер, его необходимо перекомпилировать для Arm64. Приложение x86 может работать нормально при эмуляции, однако его драйвер потребуется перекомпилировать для Arm64, и все возможности приложения, которые зависят от драйвера, будут недоступны. Дополнительные сведения о компиляции драйвера для Arm64 см. в статье Создание драйверов Arm64 с помощью WDK.

Расширения оболочки

Приложениям, которые пытаются подключить компоненты Windows или загрузить свои библиотеки DLL в процессы Windows, потребуется перекомпилировать эти библиотеки DLL в соответствии с архитектурой системы; т. е. Arm64. Как правило, они используются редакторами методов ввода ,специальными возможностями и приложениями расширения оболочки (например, для отображения значков облачного хранилища в Обозреватель или контекстного меню). Сведения о том, как перекомпилировать приложения или библиотеки DLL в Arm64, см. в записи блога Ранняя предварительная версия поддержки Visual Studio для Windows 10 на arm .

Отладка

Дополнительные сведения об инструментах и стратегиях отладки в Arm см. в статье Отладка в Arm .

Виртуальные машины

Платформа гипервизора Windows не поддерживается на платформе мобильных ПК Qualcomm Snapdragon 835. Следовательно, запуск виртуальных машин с помощью Hyper-V не сработает. Мы продолжим развивать эти технологии в будущих микросхемах Qualcomm.

Создание динамического кода

Классические приложения X86 эмулируются в Arm64 системой, создающей инструкции Arm64 во время выполнения. Это означает, что если классическое приложение x86 предотвращает создание или изменение динамического кода в своем процессе, это приложение не может поддерживаться для запуска как x86 в Arm64.

Это устранение рисков безопасности, в некоторых приложениях включается процесс с помощью API SetProcessMitigationPolicy с флагом ProcessDynamicCodePolicy . Для успешного выполнения в Arm64 в качестве процесса x86 эту политику устранения рисков необходимо отключить.