Почему в последних версиях windows нет возможности напрямую создавать 16 битные приложения

Обновлено: 28.03.2024

Официально озвучено Microsoft, что последняя версия Windows поддерживающая 16-разрядные приложения - это WinXP.
Попробовал установить в Win7 приложение Advantech Genie (SCADA система, инсталятор которой занимает меньше 3 Мбайт!. купленная в 1994 г. для работы под Win3.11). Работает как часы! функционируют пользовательские dll, написанные нашими программистами на MSVC 1.52. Нет только изображений иконок в заголовках форм, но это такая мелочь.
Вопрос: Я натолкнулся на "чудо"-сборку Windows 7 или Microsoft даёт неточную информацию по поддержке 16-разрядных приложений? Какие проблемы возможны в дальнейшем если уйти с XP на семёрку (SCADA система используется в районных котельных для отображения теплотехнических параметров, построения графиков и проч.)

Разделить 32 разрядные числа, используя 16 разрядные регистры
мне нужно поделить 32 разрядные числа используя 16 разрядные регистры, я делал деления 16 разрядных.

Вышла последняя бета-версия Windows 8 и Windows Server 8
Вслед за бета-версиями Windows 8 и Windows Server 8 Microsoft выпустит финальную версию новой.

Какая последняя версия Windows 7?
Какая последняя последняя весрия windows 7?

Какая самая последняя версия Windows 8.1 ?
Доброго времени суток. Нужна помощь. Подскажите пожалуйста какая самая последняя версия Windows 8.1.

Решение

Даже на 32-битной Windows 10 есть возможность запускать 16-битные приложения, нужно установить компонент NTVDM. Правда, насколько она остается совместимой с такими программами вопрос открытый. На ранних билдах 10ки лично запускал.
На 64-битной Windows ни на какой версии ОС такой возможности нет. Официально озвучено Microsoft, что последняя версия Windows поддерживающая 16-разрядные приложения - это WinXP. возможно я неправ, но искать где я это прочитал не хочется. Считайте это дезинформацией.

jkrnd, любая 32-х разрядная WIN'ь, в 64-ех разрядных, наличие 16-ти битного кода, априори, не поддерживается.

В этой статье обсуждается отсутствие поддержки 16-битных компонентов, 16-битных процессов или 16-битных приложений в x64-версиях Windows.

Применяется к: Окно 10 — все выпуски, Windows Server 2012 R2
Исходный номер КБ: 896458

Сводка

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

Дополнительная информация

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

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

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

Техническая поддержка Windows x64

Производитель оборудования предоставляет техническую поддержку и помощь для выпусков Microsoft Windows x64. Производитель оборудования предоставляет поддержку, поскольку Windows x64 была включена в ваше оборудование. Производитель оборудования мог настроить установку Windows x64 с уникальными компонентами. Уникальные компоненты могут включать определенные драйверы устройств или могут включать необязательные параметры для максимальной производительности оборудования. Корпорация Майкрософт предоставит необходимую помощь, если вам потребуется техническая помощь с Windows x64. Однако вам может потребоваться связаться с производителем напрямую. Ваш производитель лучше всего может поддерживать программное обеспечение, установленное производителем на оборудовании.

Чтобы иметь возможность запускать в современных версиях Windows старые 16-битные приложения, необязательно использовать эмуляторы, та же Windows 10, к примеру, вполне корректно работает с 16-битными программами, причем даже без необходимости использования режима совместимости. Но если так, чем тогда объяснить ошибку «Файл является 16-рразрядным приложением. У вас нет разрешений на выполнение 16-разрядных приложений» ?

Причина очень проста и указывается в окне ошибки — у вас действительно отсутствуют права на запуск исполняемых файлов 16-разрядных программ.

Файл является 16-рразрядным приложением. У вас нет разрешений на выполнение 16-разрядных приложений

В свою очередь, причина отсутствия прав заключается в том, что системный администратор (на корпоративном компьютере) или сборщик операционной системы отключил эту возможность.

Если вы хотите запускать в Windows 10 или 11 16-битные программы, операционную систему нужно будет соответствующим образом сконфигурировать. Если у вас Windows редакции Pro и выше и при этом у вас есть права администратора, получаем разрешение с помощью редактора локальных групповых политик.

Откройте его командой gpedit.msc и перейдите по цепочке настроек, показанных на этом изображении.

Цепочка настроек

Справа в списке политик найдите настройку «Запрещение доступа к 16-разрядным приложениям» и дважды по ней кликните, чтобы открыть окно свойств.

Gpedit

Активируйте в этом окошке радиокнопку «Не задано» либо «Отключено» и сохраните настройки.

Запрещение доступа к 16-разрядным приложениям

Старое приложение 16 бит должно запуститься в обычном режиме.

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

Открываем его командой regedit и разворачиваем ветку HKLM\SOFTWARE\Policies\Microsoft\Windows\AppCompat .

В правой колонке у вас должен быть DWORD -параметр VDMDisallowed со значением 1. Измените его значение на 0 и перезагрузите компьютер.

VDMDisallowed

Если параметр отсутствует, создайте его вручную.

Результат применения твика должен быть аналогичным результату изменения указанной выше политики.

Если быть более точным, у меня есть 64-разрядный процессор (Intel Core 2 Duo). Когда у меня были установлены Windows XP и Windows 7 (обе 32-битные), они могли запускать старые приложения для DOS и 616-битные Windows.

Теперь я установил 64-разрядную версию Windows 7. Почему она больше не может запускать те же приложения?

Я думаю, что это связано не столько с битами, сколько с гостевой операционной системой. На какие ОС вы конкретно ссылаетесь? Существует утилита под названием DOSBOX, это 16-битный эмулятор, который дает вашей 16-битной программе виртуальный 16-битный компьютер для работы на нем и бесплатно. Я согласен с Pekka в том, что 64-битная (аппаратная) система может выполнять 16-битный код (черт, даже 1-битный код, если ОС была спроектирована таким образом). Суть в том, что ЦП не может напрямую запускать 16-битный код из-за таких вещей, как разный размер указателя, но ОС может устранить эти проблемы. Ограничение является искусственным, которое Microsoft наложило для упрощения вещей (хотя они все еще эмулировали 32-битный, потому что все еще так много 32-битного кода). Существуют и другие ОС (* nix?), Которые могут без проблем запускать 16-битный код.

Насколько я понимаю, это потому, что при работе в длинном режиме (собственно x64), сам процессор не поддерживает переход в 16-битный режим. Смотрите Википедию . Таким образом, для поддержки 16-битного режима NTVDM (16-битный уровень в Windows) должен полностью эмулировать 16-битный процессор.

Я предполагаю, что они взвесили повторную реализацию уровня эмуляции по сравнению с использованием уже существующего программного обеспечения для виртуализации (VirtualPC, VirtualBox), чтобы решить эту проблему, и было решено сократить VDM.

Цитата из Википедии : Версии Windows NT для 64-битных архитектур (x64 и IA-64) не включают NTVDM и не могут запускать приложения DOS или 16-битные Windows. Это связано с тем, что в процессоре x86-64 виртуальный режим 8086 доступен в качестве подрежима только в его устаревшем режиме (для 16- и 32-разрядных операционных систем), а не в собственном 64-разрядном длинном режиме; для переключения в унаследованный режим требуется полная перезагрузка процессора. Таким образом, единственный способ, которым NTVDM работал до сих пор, больше не доступен, и полных виртуальных машин достаточно, поэтому NTVDM был сокращен. Фу, я не могу поверить, что они сбросили режим V86. Можно также полностью сбросить реальный режим и потребовать 32/64 битных загрузчиков, если вы собираетесь это сделать. Это именно то, что уже произошло, М. Кноблаух. Современная машина x86 с прошивкой EFI сразу переходит из нереального режима в своих первых инструкциях в 64/32-битный защищенный режим. Загрузчики действительно являются 64/32-битными программами в защищенном режиме. Вот что такое загрузочные приложения EFI. В этом процессе нигде не используется реальный режим или защищенный режим v8086. @HughAllen: на этой странице в настоящее время написано: «В настоящее время в 64-битной версии ядра Linux отсутствует поддержка режима V86, поскольку он не поддерживается в основном режиме работы (длинном режиме) этих процессоров». и «Этот патч очень экспериментальный ». Короткий ответ заключается в том, что, хотя можно запустить 16-битный код, полностью выйдя из длинного режима, это не имеет смысла .

Поскольку 64-битные дескрипторы имеют 32 значащих бита :

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

В Windows программы передают «дескрипторы» ОС и наоборот (это числа, которые ОС использует для уникальной идентификации конкретного ресурса, такого как окно).

Для поддержки 16-битных программ 32-битная Windows генерирует только дескрипторы, которые имеют 16 значащих битов - 16 старших бит игнорируются ОС (даже если программы не используют этот факт в своих интересах). Таким образом, ни одна программа не может взаимодействовать с более чем 2 16 объектами, что на самом деле довольно мало.

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

Читайте также: