Поделиться через


Устранение неполадок классических приложений 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, эта политика устранения рисков должна быть отключена.