Получить импортированные пользователем библиотеки DLL из таблицы импорта DLL - PullRequest
0 голосов
/ 17 июня 2011

Мне нужно проверить наличие данной библиотеки DLL, если все библиотеки DLL, от которых она зависит, присутствуют.Мне удалось получить список библиотек DLL, используя код, приведенный в этом вопросе: Как программно читать импорт собственных DLL в C #? .Он дает список библиотек DLL, в том числе системных (например, kernel32.dll и других).Что мне нужно, так это удалить их из этого списка, поскольку мне не нужно их проверять, мне нужно только проверять библиотеки DLL, явно импортированные разработчиком.

Есть идеи, как это сделать?

1 Ответ

3 голосов
/ 17 июня 2011

Нет никакого различия между DLL-библиотеками Windows и «обычными» DLL-библиотеками.Программист на самом деле действительно явно создал зависимость от них, это не случайно.И вам нужно проверить их, для этого может потребоваться DLL, которая, скажем, доступна только в более поздней версии Windows.

Если серьезно, есть много способов, которымиВаш подход не будет работать надежно.Вы никогда не сможете выяснить, когда он использует DLL из параллельного кэша Windows, например.Вы не можете разумно войти в бизнес разбора манифестов.Кроме того, для DLL часто имеют динамические зависимости от других DLL вместо статических зависимостей, которые вы воссоздаете из IAT.Это верно для COM, а также для сборок .NET, например.

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

...