Что такое dll файл, и почему их часто не хватает в Windows?

Нередко при попытке запустить какое-то приложение (часто игру), пользователь получает сообщение об отсутствующем файле .dll. Самый простой, на первый взгляд, способ — найти и скачать подходящий dll файл в сети. Однако часто такой вариант развития событий чреват последствиями. Читаем далее.

Что такое dll файл?

DLL файл — файл динамически подключаемой библиотеки (библиотеки динамической ссылки)- некий набор кодов и данных для выполнения в Windows конкретного действия в рамках файлу отведённых. К dll-кам часто обращаются приложения (как сторонние так и внутренние — от имени Windows) в конкретный момент и часто на определённый срок. Тяжеловесные приложения (опять же игры) часто сами вместе с установкой пополняют хранилище dll файлов, так как система ими по умолчанию не обладает. Таким образом по типу действия dll файлы чем-то напоминают исполнительные файлы .exe, (и те и другие используют один формат файлов Portable Executable — PE) кроме некоторых моментов:

  • сам по себе dll запустить напрямую нельзя
  • в то же время к одному набору dll файлов могут обращаться многие приложения, причём одновременно
  • а слово «ссылки» в названии файла означает, что, помимо всего прочего, они могут вызывать и друг друга по ситуации: запуск одного такого файла может вызвать запуск десятков других dll-лок. В отличие от статических библиотек .lib, которые уже находятся в модуле и работают только во время этапа компиляции программы (часто файлы .lib обнаруживаются в файлах .exe и .dll) —  в виде отдельного файла в Windows такие файлы трудно найти.

Вообще, dll-лки — прерогатива Windows, которая сама частично состоит именно из этих файлов («пингвинятники» в Линукс имеют дело с аналогичными файлами с расширением .so), активно используя COM компоненты и библиотеки .NET. В этом легко убедиться, совершив экскурс в системную папку system32 (в 64-х битных версиях это ещё и папка C:\Windows\SysWOW64):

dll файл

Какие dll файлы задействуются программами прямо сейчас, можно узнать, запустив, к примеру, утилиты  Autoruns for Windows , пробежавшись по вкладкам программы:

dll файл для программы

Как работает dll файл?

Так, открывая или сворачивая окна, натыкаясь на ошибки, переустанавливая оборудование в системе, наводя курсор и видя всплывающие подсказки, мы часто натыкаемся на бесчисленное (как нам кажется) множество диалоговых и просто справочных окон, которые в Windows становятся всё догадливее. И часто просто не обращаем на это внимание. Такие сообщения, например, и есть плод перекрещивающейся работы dll-файлов Windows.

Любая устанавливаемая в Windows программа всегда использует либо свои немногочисленные или имеющиеся в системе dll-ки. Программа обычно загружает свою dll-ку во время автозагрузки через специальную библиотеку Win32 API LoadLibrary или по сигналу с другого dll-файла. Обычно это выглядит так:

  • exe-шник запускается, Windows его загружает, проверяя таблицу параметров и величин, в которой написано, что, мол, «мне нужны вот такие функции вот этого dll файла и вон того dll файла».  На «околотехническом» языке это называется импортированием функций dll файла в исполнительный exe файл программы.
  • код загрузчика ищет обозначенные файлы dll, и обнаружив их, загружает в память
  • начинает работать сам файл.dll. В нём есть уже свой список экспортируемых функций, который как телефонный коммутатор объединяет между собой адреса функций внутри самого файла (их в одном файле может быть немало); если это необходимо, функция файла1.dll может обратиться и к некоторым функциям файла2.dll. Exe-шник запущенной вами программы теперь работает с файлами, просто обращаясь к этим адресам напрямую.

К СВЕДЕНИЮ

Возможность же использовать dll-ки одновременно многими приложениями позволяет разработчикам программ в Windows не корпеть над каждым куском кода заново (хотя львиную долю кода для установки, удаления и т.д. приходится писать самому), а использовать готовые и прошитые с установкой в Windows библиотеки файлов, например Microsoft .Net Framework. Вы в Windows их видите каждый день, ведь dll-ки  — это системные функции, классы, переменные, элементы интерфейса: меню, окна, диалоги, шрифты, курсоры, пиктограммы, строки и т.п. И самое главное для разработчиков программ для Windows преимущество использования таких файлов состоит в том, что обновляя свои dll-файлы, Windows обновляет и чужие программы, защищая от багов, ошибочных оповещений и т.п. Так что этот факт — лишняя копейка в копилку тех, кто понимает, что прежде всего системными обновлениями гнушаться не стоит.

Куда они исчезают или почему в системе отсутствует dll файл ?

перерегистрация файлов dll

Этот вопрос абсолютно аналогичен вопросу, рассматриваемому в статье «DirectX — для каждой игры свой?» Так что давайте поэтапно, если в системе возникли вопросы по поводу пропажи или повреждения dll. Так вот, основные «неполадки» вокруг проблем с dll-ками крутятся вокруг таких вариантов развития событий:

  •  файл отсутствует — да, скорее всего, он никуда не пропал: речь идёт о его/их повреждении. Его местонахождение — системная папка, папка с набором специальных библиотек или программа с установленными файлами. А, следовательно, речь может быть идти о программном (или, не дай Бог, физическом) сбое на вашем жёстком диске: просто попробуйте его найти с помощью привычных средств поиска и убедиться в его наличии
  • файл действительно отсутствует — антивирусная программа прекрасно распознаёт зловредное действие таких файлов (особенно при запуске в песочнице) и может принять решение на удаление файла. Ну, и оно вам надо — такая программа и последствия от её использования?
  • файл отсутствует сразу после первого запуска программы — такая беда часто подстерегает тех, кто при установке программы пренебрегает рекомендациями к установке, пытаясь при этом действовать без оглядки на системные требования. Попробуйте переустановить программу, внимательно устанавливая или обновляя предложенные пакеты библиотек; в противном случае попробуйте найти необходимый файл по названию в сети. НО. Предупреждаю сразу — это очень чревато, так что читайте статью до конца.

Почему нельзя просто его скачать?

Я бы первым же делом заразил файл, подсунув туда троян, замаскировав его под функцию обращения к какому-нибудь процессу. Рассчитывая на то, что пользователь в спешке запустить любимую программу согласится на всё, пропуская мимо глаз свист антивируса. Поверьте, 5-6 из 10 сайтов в сети так и делают. Их основная задача — принять запрос из поисковой выдачи на скачивание подозрительных (а какими ещё могут быть с точки зрения современных антивирусов и даже современных версий браузеров) файлов, и подсунуть вам. Как работает dll файл вы уже примерно знаете, и какую цепочку действий против вас в вашей Windows он создаст, знает только хакер.

Ещё один вариант — в ответ на ваш запрос вы наткнётесь на чаще всего платную, но очень навязчивую и красочную программу по ремонту системных файлов, функции которой крайне бедны (даже если запущенный после её установки «анализ» показал, что в системе «ну всё очень плохо!»).

Но да ладно: скачали, вирусов нет… На популярном и наиболее часто используемом в этих случаях ресурсе:

https://ru.dll-files.com/

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

Как исправить ошибку dll ?

Подход к попытке исправить возникшую ошибку зависит именно от самостоятельной диагностики вероятных причин. О них вы знаете из предыдущего абзаца. А значит:

  • битые сектора (плохие секторы) жёсткого диска — нередко уже привычная ошибка компьютера, который подключён к розетке или ноутбука, у которого барахлит блок питания или батарея. Это даже нормально, иначе в Windows не появилась отдельная ремонтная утилита (в составе целого их набора) chkdsk.exe, призванная такие ошибки исправлять. Умение работать с утилитой — первейшая необходимость пользователя. При этом, если имя повреждённого файла вам известно, не обязательно прогонять полномасштабную проверку всего тома на ошибки. Можно начать с конкретной проверки файла, при которой команда проверки, к примеру, примет вид:
sfc /scanfile=c:\windows\system32\kernel32.dll
  • обнаружили повреждённые секторы и избавились от них? Самое время проверить систему на целостность файлов. В Windows 7 и Windows 10 для этого есть различные подходы, но все они сводятся к проверке системных файлов на целостность. Используйте утилиту sfc /scannow из состава ремонтных утилит в Windows 7 или утилиту восстановления образа Windows (для «10-ки»). Один из вариантов: проверить в поиске по сети имя файла, что за зверь и снять его с дистрибутива Windows или из «живой » системы соседа.
  • ссылку на сайт по поиску dll-ок видели? Отправляйтесь сначала туда. Не очень давно там появилось НЕбесплатное решение исправить проблему с dll файлами с помощью специального клиента. Я его не пробовал по причинам, которые следуют ниже.
  • при попытке исправить ошибку вы — не исключено — наткнётесь на круговую зависимость: когда восстановление одного файла вызывает окно с ссылкой на ошибку повреждения другого. В статье про «Ошибочный образ» я как раз рассматриваю попытку «разрулить» такую ситуацию. Сразу скажу — безуспешно. Причина тому — повреждение целого класса библиотек dll в результате классического случая присущего прыщавым геймерам «скачивать из сети без оглядки», отключив при этом антивирус, который из раза в раз сообщает об устанавливаемых с игрой троянах. Ложные, мол, срабатывания . Как итог: переустановка пакетов Microsoft .NET Framework всех версий наряду с Microsoft Visual C++ Redistributable. А это, кто знает, проще «Wind-у переустановить».
  • однако, несмотря на написанное выше, ошибка dll может быть вызвана просто некорректной установкой самой программы. Этот тот случай, когда проблема стала появляться в защищённой системе СРАЗУ после установки чего-то. Итог — переустановите (или «перекачайте» — образ программы может быть битым из-за некачественной раздачи или потери пакетов с вашей стороны)
  • вариант последний — для профи. Набраться наглости и потребовать у разработчиков оригинальный dll файл с описанием проблемы. Не факт, что вы получите вразумительный ответ (или получите вообще), но вежливость с грамотно составленным запросом творит чудеса.

У меня всё, успехов вам.

Запись опубликована в рубрике Настройки Windows. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

18 − пятнадцать =