Общие сведения о совместимости 32-разрядных программ в 64-разрядных версиях Windows

В этой статье рассматриваются вопросы совместимости и ограничения для 32-разрядных программ, работающих в 64-разрядных версиях Windows.

Применимо к следующим выпускам: Windows 10 – все выпуски, Windows Server 2012 R2
Оригинальный номер базы знаний: 896456

Аннотация

В 64-разрядных версиях Windows используется подсистема Microsoft Windows-32-on-Windows-64 (WOW64) для запуска 32-разрядных программ без изменений. 64-разрядные версии Windows не поддерживают 16-разрядные двоичные файлы или 32-разрядные драйверы. Программы, которые зависят от 16-разрядных двоичных файлов или 32-разрядных драйверов, не могут работать в 64-разрядных версиях Windows, если производитель программы не предоставил обновление для программы.

Могут рассматриваться вопросы, влияющие на совместимость или производительность программы. Вы можете определить, возникнут ли у программы проблемы с совместимостью или производительностью, протестировав программу в одной из 64-разрядных версий Windows.

В этой статье описываются некоторые рекомендации по совместимости при запуске 32-разрядных программ в 64-разрядных версиях Windows. В этой статье не сравниваются 32-разрядная и 64-разрядная версии Windows или другие 64-разрядные операционные системы. В этой статье предполагается, что вы понимаете разницу между 32-разрядными и 64-разрядными двоичными файлами.

Введение

64-разрядные версии Microsoft Windows оптимизированы для запуска собственных 64-разрядных программ. Кроме того, в 64-разрядных версиях Windows для запуска 32-разрядных программ используется подсистема WOW64.

Запуск 32-разрядных программ

Подсистема WOW64 позволяет запускать 32-разрядные программы без изменений в 64-разрядных версиях Windows. В подсистеме WOW64 это осуществляется путем создания 32-разрядной среды в 64-разрядных версиях Windows. Дополнительные сведения о подсистеме WOW64 см. в статье «Запуск 32-разрядных приложений» в разделе «64-разрядная версия Windows» документации по Microsoft Platform SDK. Для просмотра этого документа посетите следующий веб-сайт корпорации Майкрософт: Запуск 32-разрядных приложений.

Рекомендации по производительности программы

Подсистема WOW64 создает 32-разрядную среду в 64-разрядных версиях Windows. Некоторые 32-разрядные программы могут работать в этих операционных системах медленнее, чем в 32-разрядных версиях Windows. Кроме того, некоторые 32-разрядные программы, для которых требуется много памяти, могут демонстрировать повышенную производительность в 64-разрядных версиях Windows. Такое увеличение производительности происходит потому, что 64-разрядные версии Windows поддерживают больше физической памяти, чем 32-разрядные версии Windows.

Дополнительные сведения о различиях в управлении памятью между 64-разрядной и 32-разрядной версиями Windows см. в статье «Виртуальное адресное пространство» раздела «Об управлении памятью» документации по Microsoft Platform SDK. Для просмотра этого документа посетите следующий веб-сайт корпорации Майкрософт: Виртуальное адресное пространство

Ограничения подсистемы WOW64

Подсистема WOW64 не поддерживает следующие программы:

  • Программы, скомпилированные для 16-разрядных операционных систем
  • Программы в режиме ядра, скомпилированные для 32-разрядных операционных систем

16-разрядные программы

64-разрядные версии Windows не поддерживают 16-разрядные программы или 16-разрядные программные компоненты. Программная эмуляция, необходимая для запуска 16-разрядных программ в 64-разрядной версии Windows, значительно снижает производительность этих программ.

16-разрядный установщик часто используется для установки и настройки 32-разрядной программы. Кроме того, для правильной работы некоторых 32-разрядных программ требуются 16-разрядные компоненты. Хотя 32-разрядные программы, для которых требуются 16-разрядные компоненты, могут запускаться правильно после их установки, нельзя использовать 16-разрядный установщик для установки 32-разрядной программы. Программы, для которых требуются 16-разрядные компоненты, не могут запускаться в 64-разрядных версиях Windows.

Если 32-разрядная программа, для которой требуются 16-разрядные компоненты, попытается запустить 16-разрядный файл или компонент, 32-разрядная программа зарегистрирует сообщение об ошибке в системном журнале. Затем операционная система позволит 32-разрядной программе обработать ошибку.

Чтобы определить, требуется ли для программы 16-разрядный компонент, установите и запустите программу. Если программа создает сообщение об ошибке, обратитесь к производителю программы для получения обновления, совместимого с 64-разрядными версиями Windows.

32-разрядные драйверы

64-разрядные версии Windows не поддерживают 32-разрядные драйверы. Все драйверы аппаратных устройств и программные драйверы должны быть скомпилированы специально для 64-разрядной версии Windows.

Если 32-разрядная программа пытается установить 32-разрядный драйвер на компьютере под управлением 64-разрядной версии Windows, установка драйвера завершается ошибкой. При таком поведении 64-разрядная версия Windows сообщает об ошибке в 32-разрядную программу.

Если 32-разрядная программа пытается зарегистрировать 32-разрядный драйвер для автоматического запуска на компьютере под управлением 64-разрядной версии Windows, программа начальной загрузки на компьютере распознает, что 32-разрядный драйвер не поддерживается. 64-разрядная версия Windows не запускает 32-разрядный драйвер, но запускает другие зарегистрированные драйверы.

Чтобы определить, требуется ли программе 32-разрядный драйвер, установите и запустите программу. Если программа создает сообщение об ошибке, обратитесь к производителю программы для получения обновления, совместимого с 64-разрядными версиями Windows.

Дополнительные сведения

Перенаправление реестра и файлов

Подсистема WOW64 изолирует 32-разрядные двоичные файлы от 64-разрядных двоичных файлов путем перенаправления вызовов реестра и некоторых вызовов файловой системы. Подсистема WOW64 изолирует двоичные файлы, чтобы предотвратить случайный доступ 32-разрядного двоичного файла к данным из 64-разрядного двоичного файла. Например, 32-разрядный двоичный файл, который запускает DLL-файл из папки %systemroot%\System32, может случайно попытаться получить доступ к 64-разрядному DLL-файлу, который несовместим с 32-разрядным двоичным файлом. Чтобы избежать этого, подсистема WOW64 перенаправляет доступ из папки %systemroot%\System32 в папку %systemroot%\SysWOW64. Это перенаправление предотвращает ошибки совместимости, поскольку требуется, чтобы DLL-файл был специально разработан для работы с 32-разрядными программами.

Дополнительные сведения о перенаправлении файловой системы и реестра см. в статье «Запуск 32-разрядных приложений» в разделе «64-разрядная версия Windows» документации по Microsoft Platform SDK. Для просмотра этого документа посетите следующий веб-сайт корпорации Майкрософт: Запуск 32-разрядных приложений
Подсистема WOW64 перенаправляет 32-разрядные двоичные вызовы без внесения изменений в 32-разрядные двоичные файлы. Однако при выполнении некоторых задач может появиться свидетельство этого перенаправления. Например, если ввести скрипт командной строки в 64-разрядной командной строке, командная строка не сможет получить доступ к 32-разрядным программам в папке "Program Files". Подсистема WOW64 выполняет перенаправление и устанавливает 32-разрядные программы в папке Program Files (x86). Чтобы получить доступ к правильной папке, необходимо изменить сценарий командной строки. Кроме того, необходимо ввести скрипт командной строки в 32-разрядной командной строке. 32-разрядная командная строка автоматически перенаправляет вызовы файловой системы в нужный 32-разрядный каталог.

Чтобы открыть 32-разрядную командную строку, выполните указанные ниже действия:

  • Щелкните Пуск, выберите команду Выполнить, введите %windir%\SysWoW64\cmd.exe, затем нажмите кнопку OK.

Проверка версии

Некоторые 32-разрядные программы проверяют сведения о версии операционной системы. Многие 32-разрядные программы, которые выполняют эту проверку, не распознают 64-разрядные версии Windows как поддерживаемые операционные системы. В этом случае 32-разрядная программа создаст ошибку проверки версии, а затем закроется. В случае возникновения подобного поведения обратитесь к производителю 32-разрядной программы для получения обновления, совместимого с 64-разрядными версиями Windows.

Microsoft .NET Framework

Программа, скомпилированная с помощью Microsoft .NET Framework, будет выполняться как 32-разрядная программа в подсистеме WOW64, если выполняются следующие условия:

  • В сведениях о заголовке программы задано битовое значение ILONLY.
  • Программа была скомпилирована с помощью Microsoft .NET Framework 1.1. Если в сведениях заголовка не задан бит ILONLY или программа была скомпилирована с помощью Microsoft .NET Framework версии 2.0, программа будет выполняться как собственная 64-разрядная программа.

OpenGL

64-разрядные версии Windows не включают графический драйвер OpenGL. Обратитесь к производителю устройства для получения драйвера, совместимого с 64-разрядными версиями Windows.

Консоль управления (MMC)

В 64-разрядных версиях Windows используется 64-разрядная версия консоли управления (MMC) для запуска различных оснасток. Однако иногда для запуска оснасток в подсистеме WOW64 может потребоваться 32-разрядная версия MMC. Дополнительные сведения о поведении MMC в 64-разрядных версиях Windows см. в статье «Запуск 32-разрядных и 64-разрядных оснасток в 64-разрядной версии Windows» в разделе «Использование MMC 2.0» документации по Microsoft Platform SDK. Чтобы просмотреть этот документ, посетите следующий веб-сайт корпорации Майкрософт: Запуск 32-разрядных и 64-разрядных оснасток в 64-разрядной версии Windows

Рекомендации по использованию 64-разрядной версии

64-разрядные версии Windows поддерживают 32-разрядные и 64-разрядные инструкции. Подсистема WOW64 может запускать 32-разрядные программы в собственном 64-разрядном режиме, переключая собственный режим процессора. Отдельные аппаратные или программные уровни не требуются. При запуске 32-разрядной программы в 64-разрядных версиях Windows производительность может не снижаться.

Для получения дополнительных сведений о производительности процессора x64 обратитесь к производителю процессора или посетите веб-сайт производителя. Содержащиеся в документе сведения и рассмотренные решения отражают позицию корпорации Майкрософт в отношении обсуждаемых вопросов на момент публикации. Для получения данного решения необходимо обратиться в корпорацию Майкрософт или к сторонним поставщикам. Ни один из независимых поставщиков и ни одно из решений сторонних разработчиков, описываемых в данной статье, не являются предпочтительными с точки зрения корпорации Майкрософт. Кроме независимых поставщиков и решений сторонних разработчиков, упомянутых в данной статье, могут существовать и другие поставщики и решения. В условиях меняющейся рыночной конъюнктуры эти сведения не следует рассматривать в качестве какого бы то ни было обязательства со стороны корпорации Майкрософт. Корпорация Майкрософт не подтверждает и не гарантирует точности сведений и решений, предоставленных корпорацией Майкрософт или упомянутыми сторонними разработчиками.

Корпорация Майкрософт не предоставляет никаких гарантий и отказывается от явных, подразумеваемых или предусмотренных законодательством гарантий, заверений и условий, включая (но не ограничиваясь только ими) отказ от обязательств, условий или гарантий прав собственности, ненарушение прав интеллектуальной собственности, пригодности для продажи и применимости для определенной цели, гарантии качества в связи с использованием продукта, решения, услуг или других материалов или данных. Корпорация Майкрософт не несет ответственности за решения сторонних разработчиков, упомянутые в данной статье.

Ссылки

Дополнительные сведения о процессоре AMD64 см. на следующем веб-сайте Advanced Micro Devices: Веб-сайт AMD
Контактные данные сторонних организаций предоставлены в этой статье с целью помочь пользователям получить необходимую техническую поддержку. Эти данные могут быть изменены без предварительного уведомления. Корпорация Майкрософт не дает гарантий относительно правильности приведенных контактных данных сторонних производителей.

Дополнительные сведения о разработке программ для версий Windows Server 2003 и Windows XP на базе процессоров Itanium см. на следующем веб-сайте корпорации Майкрософт: Введение в разработку приложений для 64-разрядной версии Windows на базе процессоров Itanium.

В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких явных, подразумеваемых и прочих гарантий относительно производительности или надежности этих продуктов.