Основные системные DLL'ки - Не хватает DLL'ки... Что делать

Автор: Вадим СТАНКЕВИЧ

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

Говорить будем о 32-битных системах - они пока что всё-таки более распространённые. Хочу сразу предупредить, что мы с вами сейчас не будем рассматривать, как именно устроены внутри системные DLL-библиотеки и чем именно (количественно и качественно) они отличаются от остальных DLL'ек. Как правило, для продвинутого пользователя эти знания имеют не слишком большую практическую ценность, и, кроме того, для того, чтобы подробно рассказать обо всём этом, придётся очень сильно углубляться в дебри работы операционной системы, а это значит, что, скорее всего, при таком раскладе места в статье на сами DLL'ки уже, увы и ах, совершенно не останется.

Системные библиотеки лежат в системной папке - на то они и системные. В старых версиях Windows (9x и ME) они помещались в поддиректории "System" папки с системой, в ОС линейки Windows NT они находятся в папке "System32". Лучше без надобности в эти папки не залезать, но если вы встретите их где-то в другом месте, то лучше сразу их удалить, потому что это, скорее всего, будут какие-нибудь трояны. Даже если это и копии системных библиотек, всё равно при их удалении из несистемных папок ничего плохого не произойдёт.

Для чего же пользователю знать назначение той или иной библиотеки? В самом простом случае - если система выдаст Blue Screen of Death (BSOD), чтобы можно было хотя бы примерно представить, с чем именно он связан. Но на самом деле здесь вопрос не только в сугубо практическом применении таких знаний - лично я считаю, что для того, чтобы быть продвинутым пользователем, просто необходимо знать подобные вещи.

Впрочем, что-то я опять заговорился. Это уже профессиональное :). Давайте уже, наконец, перейдём к нашим DLL'кам.


Hal.dll

Эта DLL - сердце операционной системы. Расшифровывается её название как Hardware Abstraction Layer - уровень аппаратной абстракции. Именно благодаря наличию такого уровня Windows имеет возможность работы на разных аппаратных платформах. В зависимости от того, какая именно аппаратная платформа наличествует на вашем компьютере, вместо hal.dll может присутствовать один из следующих файлов: Halapic.dll, Halmps.dll, Halacpi.dll, Halaacpi.dll, Halmacpi.dll.


Kernel32.dll

Следующая после уровня аппаратной абстракции библиотека из состава ядра операционной системы. О том, что без этой библиотеки работа ядра ОС невозможна, говорит уже само её название. Kernel32.dll отвечает за обработку памяти, операции ввода-вывода и прерывания - то есть, за все основные действия операционной системы с приложениями.


Ntdll.dll

Эта библиотека - своеобразный мост между теми библиотеками, которые работают в ядре операционной системы, и библиотеками, работающими в пользовательском режиме. Эти два режима имеют ряд существенных отличий, и без существования этой DLL'ки было бы невозможно применять многие старые приложения в новых версиях Windows - во многом совместимость между разными версиями ОС держится именно на ней.


Gdi32.dll

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


User32.dll, Comctl32.dll, Comdlg32.dll

Эти библиотеки реализуют внутри себя разные готовые элементы управления, которые потом используют для создания графического интерфейса пользовательские приложения. Собственно, в основном, именно эта тройка библиотек отвечает за тот внешний вид операционной системы, к которому вы привыкли.


Advapi32.dll

Думаю, понятие системного реестра знакомо каждому читателю "Компьютерных вестей". Вполне естественен тот факт, что ОС Windows предоставляет пользовательским приложениям специальные функции доступа к реестру, которые как раз и вынесены в Advapi32.dll.


Mpr.dll

Работа с сетью - тоже прерогатива операционной системы. Собственно, именно для работы с сетью и нужна mpr.dll. Взаимодействие с другими компьютерами в локальной сети, поддержка работы с сетевыми устройствами, поддержка соединения - вот далеко не полный список того, что ложится на плечи этой библиотеки.


Msvcrt.dll

Эту библиотеку можно тоже отнести к разряду системных, потому что без неё не запустятся многие стандартные приложения из состава Windows. Она несёт в себе ряд вспомогательных функций для работы с памятью, устройствами ввода и вывода, математическими функциями. Эта DLL должна быть хорошо знакома программистам, работавшим с Visual C++.

Конечно, обо всех системных DLL'ках в одной заметке не расскажешь, но мы всегда можем продолжить разговор о них, если попросите.

Не хватает DLL'ки... Что делать?

Наверняка каждый читатель "Компьютерных вестей" хоть раз в жизни сталкивался с невозможностью запустить ту или иную программу по причине отсутствия необходимых динамических библиотек, в просторечье называемых DLL'ками. В большинстве случаев проблема решаема, и довольно просто.

Итак, предположим, вы запустили программу, а она вам в ответ выдала сообщение а-ля "Приложению не удалось запуститься, поскольку SuperPuperCool.dll не был найден. Повторная установка приложения может исправить эту проблему". Казалось бы, чего тут думать - система сама же и предлагает не самый кровавый вариант решения этой проблемы, нужно вот только вспомнить, где же лежал дистрибутив этой программы. Нет, система-то, конечно, тысячу раз права, если, конечно, не хватает не какой-нибудь из системных библиотек.

Однако способ может не сработать - это раз. Многие разработчики элементарно забывают добавить в дистрибутив своей программы пару-тройку библиотек, которые написали не они, но которые, тем не менее, используются в их программном продукте. И тогда можно хоть сто раз переустанавливать программу - необходимых библиотек от этого больше ну никак не станет. Второй минус данного способа заключается в том, что нужен дистрибутив программы. Хорошо, если он есть у вас под рукой, а если нет? Большие дистрибутивы и скачивать накладно, и процесс установки более-менее крупных программ тоже вещь небыстрая.

В общем-то, из всего этого вытекает, что имеет смысл ещё до переустановки попробовать какой-нибудь альтернативный способ решения проблемы, а вот уж если он не "прокатит", тогда и отправляться на поиски дистрибутива нужной программы.

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

Искать DLL-файлы можно, конечно, с помощью Google, "Яндекса", "Рамблера" и прочих обычных поисковиков. Но гораздо проще воспользоваться специализированными архивами DLL-файлов, которых на бескрайних просторах Интернета появилось немало. Лично мне больше всего нравятся три следующих: www.dll-files.com, www.dll.ru и www.dlldll.ru. В Байнете пока подобных сайтов не появилось, но, может быть, когда-нибудь и отечественные пользователи на такое решатся. Хотя сейчас вполне достаточно и существующих архивов.

Хотя все сайты предлагают алфавитные списки разных DLL-файлов, гораздо проще будет ввести имя нужной библиотеки в строку поиска, которая есть на главной странице. Но при выборе нужной библиотеки среди результатов поиска нужно быть внимательным: названия некоторых библиотек могут совпадать для разных программ, и нужно следить за тем, чтобы скачивалась DLL'ка именно для той программы, которая у вас не хочет запускаться. Что касается версий библиотек, то совсем не обязательно она должна совпадать с версией самой программы. Так что при прочих равных лучше скачивать самую новую - довольно высока вероятность того, что программа, нуждающаяся в более старой версии, будет работать и с этой. Только если версия библиотеки указана в самом её имени (например, msvbvm50.dll), не надо скачивать библиотеку с другим именем и более новой версией (например, msvbvm60.dll).

Если библиотека не нашлась на одном архиве, попробуйте поискать на другом, третьем, подключите Google - в общем, подойдите к её поиску творчески. Ну а если найти DLL'ку не удастся или программа не захочет с ней работать, - что ж, значит, придётся переустановить эту программу.

 


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=24978