|
||
|
||
|
||
Пасмурным питерским днем... На днях у меня грохнулась NT. В этот день ничто не предвещало больших неприятностей, просто решил посмотреть кое-какой софт, скачанный по локалке: ActivePerl от ActiveState и GNU-Win32 от Cygnus Solutions. Архив Cygnus оказался битым: при распаковке появлялась заставка "Windows Setup", после чего распаковка прекращалась. Я скачал другой архив Win32 (имевший ту же длину) и поставил его. Уже не помню зачем мне нужно было перегрузить NT... Загрузка дошла до синего экрана, я опять увидел, что у меня NT Workstation Build 1381 Service Pack 5 и 128 метров мозгов. И тут мне что-то говорят о том, что невозможно найти winsrv.dll (для справки: эта DLL использовалась в предыдущих версиях NT, сейчас ее заменяет win32k.sys). Вот те раз! Ну, думаю, ерунда какая-то, перезагрузился еще раз - то же самое. Last Known Good Configuration тоже не помогает. Попробовал ERD - он отказался восстановить улей SOFTWARE. Переустанавливать NT очень уж не хочется... Попытка загрузитьсяУ меня есть маленький винчестер, на котором я храню backup и на всякий случай дистрибутив NT с несколькими сервис-паками. Я подключил этот винчестер, загрузился под Windows 98 и поставил еще одну копию NT. Загрузившись под ней, я поставил пятый сервис-пак и драйвера к видеокарточке (не работать же на мониторе с частотой 60Hz!). После этого приступил в выяснению причин отказа загружаться. Первым делом я проверил, что файл winsrv.dll действительно находится в %systemroot%\system32 и совпадает с файлом из новой инсталляции NT. Значит, дело не в нем. Возможно, проблемы с registry: я как раз ставил всякий софт, который мог написать туда кучу всякой своей ерунды. Если проблема в реестре, то скорее всего улей SYSTEM отпадает: все-таки сбой не похож на железный, да и Blue Screen Of Death не было. В итоге, я запустил regedt32 и попробовал загрузить улей SOFTWARE из упавшей инсталляции NT. Он не загружался (regedt32 не считал его файлом улья). Оставалось два варианта: либо попытаться восстановить улей SOFTWARE используя резервную копию реестра из папки %systemroot%\repair или заменить его содержимым файла software.sav из папки %systemroot%\system32\config, который как известно хранит копию улья, сделанную в конце текстовой фазы установки NT. Я выбрал первый вариант. Я сохранил на всякий случай старый файл software. Затем при помощи утилиты expand я распаковал резервную копию улья software._, которая была сделана достаточно давно, когда я последний раз обновлял ERD, в файл %systemroot%\system32\config\software и перезагрузился под первоначальной инсталляцией NT. Она загрузилась! Вся жизнь - борьба, покой нам только снитсяПосле загрузки я обнаружил, что repair disk я обновлял действительно давно: у меня тогда еще стояли "родные" драйвера к моей мышке Logitech Mouse Man Wheel (они были ужасно глючные и я их снес, оставив обычные драйвера от Logitech PS/2 Mouse; после этого колесико продолжало работать, но кнопка под большим пальцем работала только как Middle Button, а не как SHIFT как прежде). Помня о том, что в SOFTWARE хранится информация об установленных программах, я начал проверять, какие из программ я установил после backup. Ими в частности оказались: Эти и некоторые другие программы теперь работали криво (@Guard постоянно говорил, что криво поставлен, Mathematica глючила со шрифтами, а Visual C++ не запускала отладчик при ошибке приложений). Это все в добавление к тому, что иконки соответствующие файлам этих приложений были undefined. Я решил использовать самый простой выход из этой ситуации: поставить глючивший софт "поверх" существующих копий. Начать я решил с @Guard. Установка @Guard не запускалась, Visual Studio - тоже. Я проверил еще несколько setup'ов - ни один не работает. Попробовал Office 2000 Install-On-Demand - работает. Что-то подсказало мне проверить другие 16-битные приложения... Ни одно 16-битное приложение не работало. Значит, есть проблемы еще и с NTVDM. Раз я изменил улей SOFTWARE, то, может быть, NTVDM не работает из-за настроек в реестре? Находясь в первоначальной инсталляции NT, я при помощи regedt32 загрузил улей SOFTWARE новой установки NT создав ключ HKEY_LOCAL_MACHINE\SOFT, после этого при помощи regedit экспортировал (Export?Registry?File...) ключи HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft и HKEY_LOCAL_MACHINE\SOFT\Microsoft в текстовые файлы .reg (Main.reg и New.reg). Затем я заменил подстроку SOFT\Microsoft на SOFTWARE\Microsoft в файле New.reg и, запустив утилиту WinDiff из пакета Microsoft Visual Studio, начал сравнивать содержимое ульев. Никаких подозрительных различий я не нашел. Тогда может быть различия в файлах? При помощи той же WinDiff я сравнил папки system обоих инсталляций и обнаружил, что различаются файлы mscdexnt.exe и mouse.drv из папки %systemroot%\system32: у них был такой же размер и дата, как у файлов из свежей инсталляции, но WinDiff нашел различия у них внутри. Я скопировал эти файлы из новой инсталляции и запустил command.com - работает! Запустил установку @Guard - работает! Теперь осталось переставить уже установленный софт, но я не смог найти диска с Mathematica и сервис-паков для Visual Studio, так что проблемы с этими программами пришлось решать вручную. Mathematica показывала математические символы неправильным шрифтом. Понятно, что дело в установке шрифтов: для установки шрифта совершенно недостаточно просто скопировать его в папку %systemroot%\fonts, при установке шрифт прописывается в реестре. Для того, чтобы восстановить информацию о существующих шрифтах я скопировал все шрифты из папки fonts во временную папку и попытался удалить шрифты из папки fonts. Все шрифты за исключением нескольких удалились (те, которые не удалились очевидно были корректно зарегистрированы и использовались в это время). После этого я установил шрифты из временной папки обратно при помощи Install New Font... из аплета Fonts. Запустив Mathematica я убедился в том, что шрифты показывались нормально. Оставалась неприятность с Visual Studio. Дело в том, что Visual Studio устанавливает свой отладчик (debugger) для обработки ошибок приложений. После восстановления улья SOFTWARE, зарегистрированным отладчиком стал Dr. Watson (drwtsn32) - стандартный обработчик ошибок приложений в Windows NT). В Help по этой программе я нашел ключ в реестре, в котором содержится информация о зарегистрированном отладчике: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Current Version\AeDebug. В этом ключе параметр Debugger хранит командную строку для запуска отладчика, я просто заменил подстроку drwtsn32 на msdev. Параметр Auto определяет, должен ли отладчик запускаться автоматически (1) или сначала должен показать диалоговое окошко, спрашивая у пользователя нужно ли завершить задачу или запустить отладчик (0). При помощи таких-вот несложных действий я восстановил свою установку NT. Какие же выводы можно сделать из всего этого?
|
||
|
||
Copyright © 1999-2000гг. "Internet Zone" & Nik Romanov. nikspase@mail.ru, nikspase@hotmail.ru, http://www.izone.com.ua/ | ||
Копирование и использование данных материалов разрешается только в случае указания на журнал "Internet Zone" как на источник получения информации, при этом во всех ссылках обязательно явное указание адреса вэб-сайта http://www.izone.com.ua/. |