Как определить библиотеки DLL, необходимые для приложения? - PullRequest
6 голосов
/ 12 декабря 2008

В двух словах: я хочу сделать то же самое, что делает "Ходок Зависимости".

Существует ли какая-либо функция Win32 API, которая может перечислять зависимости файла EXE и / или DLL?

И есть ли безопасный способ обнаружения зависимостей от классов ActiveX? (Сомневаюсь, что это возможно, но кто знает ...)

РЕДАКТИРОВАТЬ: Мне известны доступные инструменты, которые обеспечивают те же основные функции (Dependency Walker, ProcessExplorer, AQTime, ...), но я хочу создать свою собственную программу, которая выводит текстовый файл, содержащий необходимые модули.

Ответы [ 7 ]

7 голосов
/ 12 декабря 2008

Следующие команды сбрасывают прямые зависимости some.exe:

dumpbin /imports some.exe

Работает и с DLL.

В нем не будут перечислены зависимости, такие как плагины, загруженные при запуске приложения (через вызовы LoadLibrary) То же самое для зависимостей COM, поскольку они работают одинаково (насколько я знаю).

Если вам нужно знать все библиотеки DLL, используемые запущенной программой, используйте ProcessExplorer.

6 голосов
/ 23 декабря 2008

findstr -i .dll exe.exe | больше | findstr -i .dll | больше

rem:)

3 голосов
/ 12 декабря 2008

Запустите приложение, при этом Process Explorer уже запущен и настроен на фильтрацию по имени вашего приложения .exe.

Нет способа обнаружить все зависимости COM, которые есть у исполняемого файла, без его запуска.

2 голосов
/ 12 декабря 2008

Кажется, что исходный код Dependency Walker был предоставлен Microsoft через MSJ. пожалуйста посмотрите на Re: [DUG]: Ходок за зависимостями .

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

Пожалуйста, проверьте Обновления исходного кода MSJ : поскольку у меня нет времени, я не проверял, содержит ли он исходный код или только EXE-файлы.

1 голос
/ 13 декабря 2008

Вам, вероятно, нужно пройтись по структуре файла исполняемого файла, чтобы решить это программно. Поэтому что-то вроде программы «PE Dump», которая упоминается здесь: http://msdn.microsoft.com/en-gb/magazine/cc301808.aspx будет хорошей отправной точкой Фактический код, который вам нужен, можно найти здесь: http://www.wheaty.net/downloads.htm

1 голос
/ 12 декабря 2008

Пользователь @blue ... ускользнул от Зависимость Уокер . При использовании Dependency Walker после открытия файла вы можете увидеть используемые базовые требования. Только при выполнении программы и выполнении всех ее функций вы можете найти все динамически загружаемые библиотеки DLL.

Иногда лучше всего, если вы можете, спросить у разработчика, какие библиотеки требуются. Приложение может загружать некоторые библиотеки DLL только тогда, когда это абсолютно необходимо. например Загрузка faultrep.dll для пользовательских отчетов об ошибках Windows, когда происходит сбой.

0 голосов
/ 07 сентября 2017

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

    private static HashSet<string> ReferencedAssemblies = new HashSet<string>();

    ...
    OutputDependencies(Assembly.GetAssembly(typeof(Program)), 0);
    ...

    static void OutputDependencies(Assembly assembly, int indent)
    {
        if (assembly == null) return;

        Console.WriteLine(new String(' ', indent * 4) + assembly.FullName);
        if (!ReferencedAssemblies.Contains(assembly.FullName))
        {
            ReferencedAssemblies.Add(assembly.FullName);

            foreach (var childAssembly in assembly.GetReferencedAssemblies())
            {
                OutputDependencies(Assembly.Load(childAssembly.FullName), indent + 1);
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...