Признайтесь, давно у вас стоит Windows 2000/XP/2003? А как часто возникает необходимость запускать старые 16-битные программы? Игрушку там древнюю под DOS прогнать лишний раз али какую программу года 1998-го?
Большинство пользователей хоть раз да сталкивались с упрямым нежеланием полностью 32-битных ОС исполнять 16-битный код. Как правило, это выскакивающий MessageBox с сообщением: "CONFIG.NT не предназначен для исполнения команд DOS. Закрыть/Пропустить?"
Если у вас такая беда приключилась, вашему горю можно помочь. Разберемся с тем, как ваша Windows исполняет 16-битный код.
Роль командного процессора вместо привычного нам COMMAND.COM теперь исполняет 32-битный %SYSTEMROOT%\NTVDM.EXE. Сам же товарищ command.com находится в %systemroot% только ради эмуляции. Настройки программной среды теперь берутся из файлов config.nt и autoexec.nt, которые расположены в этом же каталоге. Обратите внимание, что их копия находится в каталоге RESTORE, дабы при первом рестарте Windows с включенной System File Protection опцией восстановила все на круги своя.
Смешное сообщение выбрасывает ваша Windows, не правда ли? Файл для эмуляции не предназначен для эмуляции...;) Руки поотрывать таким переводчикам. Будем копать сами.
Первым делом - самое очевидное решение проблемы. Командный процессор NTVDM.EXE подменяется НЕРАБОТОСПОСОБНЫМ файлом... самой "Майкрософт"! Как оказалось, в октябрьском обновлении безопасности Windows из Knowledge Base 840987 был выпущен в обращение неработоспособный процессор. Вот теперь и ругай дядю Билли... Если вы проводите ручное или автоматическое обновление Windows, деинсталлируйте обновление через "Установку/Удаление программ", отключите автообновление системы и переходите к следующему шагу.
Сейчас мы будем брутально копаться в системе. Поэтому необходимо отключить System File Protection. Посмотреть, как это делается, можно в любом руководстве по тонкой настройке Windows 2000.
Далее лезем "Блокнотом" в файлы config.nt и autoexec.nt. Их содержимое не должно включать ничего, кроме
****** autoexec.nt ***** @echo off path %path%;%SystemRoot%\system32 lh mscdexnt lh redir lh dosx ***** config.nt ***** dos=high, umb device=%SystemRoot%\system32\ himem.sys files=40
Если у вас есть что-то лишнее, удалите его. Если параметры эмуляции в DOS вашей звуковой карты отличаются от стандартных (приведенных), переправьте. Возможно, ваша программа будет требовать бОльшего числа открытых файлов - увеличьте величину FILES.
Если после перезагрузки 16-битная программа по-прежнему не желает загружаться - ну что ж, вам не повезло. Дело пахнет кер... Ой, переустановкой операционной системы.
Проблема заключается в том, что для корректной поддержки 16-битного кода при своей инсталляции Windows должна увидеть в дистрибутиве стандартные файлы config.nt_ и autoexec.nt_. А их там может тривиально не оказаться. Известно, что эти файлы 100% отрезаются, если дистрибутив Windows пересобирался из оригинального при помощи программы nLite. Эта программа, кстати, сама об этом предупреждает в Readme. Так что, если у вас не оригинальный дистрибутив, а переписанный неизвестно где - ждите подвоха.
Точно так же можно ждать подвоха со стороны аппаратного обеспечения. Предположим, вы ради ускорения загрузки решили переписать дистрибутив на винчестер. Если для загрузки перед инсталляцией Windows2000 с компакт-диска вы пользовались не оригинальным загрузочным диском, а любым другим (самодельной дискетой от Windows98 или, еще хуже, мультизагрузочным "реаниматорским"), есть небольшой шанс, что драйвер CDROM на вашем загрузчике не слишком хорошо совместим с приводом. Поскольку в каталоге \I386 очень, ну ОЧЕНЬ много файлов, то сразу получить к некоторым доступ затруднительно (таймаут устройства). Самолично наблюдал, как на трех совершенно различных материнских платах повторялась одна и та же ситуация: драйвер CDROM от Samsung (sscdrom.sys), привод от TEAC (CD-540E) - и... hasta la vista, baby! Чтобы увидеть искомые файлы config.nt и autoexec.nt, приходится по 4-5 раз жать на кнопку "Обновить".
Дополнительно свою лепту может внести (если он загружается) Smartdrive. В результате ошибки кэширования некоторые файлы не переписываются с компакт-диска, и Windows Setup их не видит. Оригинальный же, майкрософтовский драйвер CDROM с релизного диска корректно кэширует любое количество файлов. В силу отсутствия необходимости файлы можно при инсталляции пропустить, но тогда придется попрощаться с поддержкой 16-битных приложений.
Итак, резюме: на данный момент времени полная поддержка 16-битного кода в Microsoft Windows 2000/XP/2003 возможна при:
- отсутствии обновления KB840987;
- корректно сконфигурированных файлах config.nt и autoexec.nt;
- наличии в момент инсталляции системы в дистрибутиве config.nt_ и autoexec.nt_.
Всегда ваш,
Mexicanetz Express,
[email protected]
Комментарии