Как узнать, какие DLL использует программа

Ошибка вида «не удаётся запустить программу, так как отсутствует файл .dll» — прямой сигнал проверить, какие именно библиотеки требуются приложению и какие из них реально загружены в системе. Узнать список зависимостей можно несколькими способами: через встроенные средства Windows, утилиты вроде Process Explorer и Dependencies, а также через командную строку без установки стороннего ПО.

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

Что такое DLL и зачем знать зависимости программы

DLL (Dynamic Link Library) — это динамически подключаемая библиотека, содержащая код и ресурсы, которые используются сразу несколькими программами. Вместо того чтобы включать один и тот же код в каждый исполняемый файл, Windows загружает общие библиотеки по мере необходимости. Это экономит память и упрощает обновления системных компонентов.

Программы загружают DLL двумя способами. При статической (неявной) компоновке библиотеки перечислены в заголовке исполняемого файла и загружаются автоматически при старте. При динамической (явной) загрузке программа сама вызывает функцию LoadLibrary в нужный момент — такие зависимости не видны при простом анализе файла и обнаруживаются только во время работы приложения.

Знание списка DLL помогает в нескольких ситуациях: диагностика ошибок запуска, поиск конфликтов версий библиотек, проверка подозрительных модулей, загруженных в процесс, и подготовка портабельной сборки программы для переноса на другой компьютер.

Просмотр DLL запущенной программы через Диспетчер задач

Самый быстрый способ без установки чего-либо — встроенный Диспетчер задач Windows. Он показывает модули, загруженные в процесс прямо сейчас. Откройте его сочетанием Ctrl + Shift + Esc, перейдите на вкладку «Подробности», найдите нужный процесс, кликните правой кнопкой и выберите пункт, связанный с просмотром деталей. Учтите, что в стандартном диспетчере отображение списка модулей ограничено — для полного списка лучше подходит Process Explorer.

Если программа уже работает, но ведёт себя странно, этот метод позволяет быстро увидеть, не подгрузила ли она неожиданные библиотеки из нестандартных папок. Обращайте внимание на путь каждой DLL: системные библиотеки обычно лежат в C:\Windows\System32, а модули из временных папок или профиля пользователя — повод для проверки.

⚠️ Внимание: завершение процесса или удаление загруженной DLL «на лету» может привести к аварийному закрытию программы и потере несохранённых данных. Сначала сохраните работу, и только потом экспериментируйте с процессами.

Process Explorer — детальный анализ загруженных библиотек

Process Explorer от Microsoft (пакет Sysinternals) — стандарт де-факто для анализа процессов. Утилита бесплатна, не требует установки и показывает каждую DLL, загруженную в выбранный процесс, вместе с путём, версией и цифровой подписью.

Порядок действий простой:

  • 🔍 Запустите Process Explorer от имени администратора — иначе часть системных процессов будет недоступна.
  • 🎯 Выделите нужный процесс в верхней панели и нажмите Ctrl + D — в нижней панели откроется список всех загруженных DLL.
  • 📋 Кликните по колонке «Path», чтобы отсортировать библиотеки по расположению и сразу увидеть модули из нестандартных папок.
  • ✍️ Дважды кликните по DLL, чтобы посмотреть её свойства и проверить цифровую подпись издателя.

Особенно полезна функция поиска: комбинация Ctrl + F позволяет найти, какой именно процесс держит конкретную DLL открытой. Это выручает, когда файл библиотеки невозможно удалить или заменить из-за блокировки.

Анализ зависимостей EXE-файла без запуска программы

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

Классический вариант — Dependency Walker, но он давно не обновлялся и может некорректно обрабатывать современные приложения. Актуальная альтернатива — открытая утилита Dependencies, которая корректно работает с библиотеками API-sets современных версий Windows. Достаточно перетащить EXE- или DLL-файл в окно программы, и она построит дерево зависимостей, подсветив красным те библиотеки, которые не найдены в системе — именно они чаще всего являются причиной ошибки запуска.

☑️ Анализ зависимостей через Dependencies

Выполнено: 0 / 5

Важный нюанс: статический анализ показывает только зависимости, объявленные в файле. DLL, подгружаемые через LoadLibrary во время работы, в списке не появятся — их придётся отслеживать уже на запущенной программе.

📊 Каким способом вы чаще всего проверяете DLL-зависимости?
Process Explorer
Dependencies / Dependency Walker
Командная строка (tasklist)
Диспетчер задач Windows

Командная строка: tasklist и другие встроенные средства

Windows умеет показывать загруженные модули и без сторонних утилит. Команда tasklist с ключом /m выводит список процессов вместе с их DLL. Чтобы увидеть модули конкретной программы, выполните в командной строке:

tasklist /m /fi "imagename eq имя_программы.exe"

Обратный запрос тоже возможен — найти все процессы, использующие конкретную библиотеку:

tasklist /m имя_библиотеки.dll

Для более глубокого анализа подойдёт PowerShell. Команда Get-Process -Name "имя" | Select-Object -ExpandProperty Modules выведет полный список модулей с путями и версиями. Результат удобно перенаправить в текстовый файл для дальнейшего изучения.

Сравнение инструментов для анализа DLL

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

ИнструментТип анализаТребует запуска программыУстановка
Диспетчер задачЗагруженные модулиДаВстроен в Windows
Process ExplorerЗагруженные модули, поиск, подписиДаПортабельная, бесплатная
DependenciesТаблица импорта файлаНетПортабельная, бесплатная
tasklist / PowerShellЗагруженные модулиДаВстроены в Windows
Dependency WalkerТаблица импорта файлаНетУстаревший, ограничения с API-sets

Для разовой диагностики ошибки запуска оптимален Dependencies: он сразу покажет недостающую библиотеку. Для проверки безопасности работающего приложения лучше подходит Process Explorer с проверкой подписей.

Почему Dependency Walker показывает ложные «отсутствующие» DLL

Начиная с Windows 7 система активно использует механизм API-sets — виртуальные библиотеки вида api-ms-win-*.dll, которые перенаправляются на реальные системные модули. Старый Dependency Walker не знает об этом механизме и помечает такие имена как отсутствующие, хотя программа работает нормально. Утилита Dependencies эту ситуацию обрабатывает корректно.

Как найти недостающую DLL и исправить ошибку запуска

Когда анализ показал, какой библиотеки не хватает, действуйте по безопасному сценарию. Сначала определите, к какому компоненту относится DLL: имена вида msvcp140.dll или vcruntime140.dll указывают на пакет Microsoft Visual C++ Redistributable, d3dx9_*.dll — на компоненты DirectX, а api-ms-win-*.dll — на системные библиотеки Windows.

Дальнейшие шаги:

  • 📦 Установите официальный распространяемый пакет с сайта Microsoft, к которому относится недостающая библиотека.
  • 🔄 Проверьте разрядность: 64-битной программе нужна 64-битная версия пакета, 32-битной — 32-битная, и обе могут сосуществовать в системе.
  • 🛠️ Для системных файлов выполните проверку целостности командой sfc /scannow в командной строке от имени администратора.
  • 📁 Убедитесь, что DLL, идущие в комплекте с программой, лежат в её папке — иногда проблема решается простой переустановкой приложения.
⚠️ Внимание: не скачивайте отдельные DLL-файлы со сторонних сайтов-каталогов. Такие файлы могут быть устаревшими, несовместимыми с вашей версией Windows или содержать вредоносный код. Корректный источник — официальный установщик программы или пакет Microsoft.

Проверка подозрительных DLL в процессе

Анализ загруженных библиотек — рабочий способ обнаружить заражение. Вредоносные программы часто внедряют свои DLL в легитимные процессы, чтобы скрыть присутствие в системе. Признаки, на которые стоит обратить внимание: модуль без цифровой подписи в процессе известного издателя, библиотека из временной папки или из %AppData%, файл со случайным набором символов в имени.

Если обнаружили подозрительный модуль, не удаляйте файл сразу. Сначала проверьте его антивирусом или сервисом множественной проверки файлов, зафиксируйте путь и имя, а затем действуйте по результатам проверки. В Process Explorer есть встроенная интеграция проверки процессов через VirusTotal — её можно включить в настройках.

⚠️ Внимание: отсутствие цифровой подписи само по себе не доказывает вредоносность — многие легитимные open-source библиотеки не подписаны. Оценивайте совокупность признаков: путь, издателя, поведение программы и результаты антивирусной проверки.

Часто задаваемые вопросы

Можно ли узнать зависимости DLL, не запуская программу?

Да. Утилиты статического анализа вроде Dependencies читают таблицу импорта прямо из EXE-файла и показывают все объявленные зависимости. Учтите, что библиотеки, загружаемые программой динамически через LoadLibrary, таким способом не обнаружить.

Почему tasklist не показывает модули некоторых процессов?

Для просмотра модулей системных процессов и процессов других пользователей командную строку нужно запускать от имени администратора. Без повышенных прав доступ к таким процессам ограничен.

Что делать, если Dependencies показывает отсутствующие api-ms-win библиотеки?

Если используете старый Dependency Walker — это ложное срабатывание из-за механизма API-sets, программа может работать нормально. Если современная утилита Dependencies показывает реально отсутствующий системный компонент, выполните проверку целостности системы командой sfc /scannow и установите актуальные обновления Windows.

Как узнать, какая программа блокирует DLL-файл?

Откройте Process Explorer, нажмите Ctrl + F и введите имя библиотеки. Утилита покажет все процессы, которые держат этот файл открытым. После завершения нужного процесса файл можно будет удалить или заменить.

Опасно ли удалять DLL из папки System32?

Да, это может нарушить работу системы и других программ, поскольку библиотеки в System32 являются общими. Удалять или заменять системные файлы вручную не следует — для восстановления повреждённых компонентов используйте sfc /scannow или переустановку соответствующего пакета.