Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Программно узнать dependencies exe-шника


Автор: borisbn 26.3.2010, 07:45
Собственно сабж

Автор: W4FhLF 26.3.2010, 08:16
Пройтись по таблице импорта exe и получить список dll из которых он импортирует функции, потом по таблицам импорта этих dll и получить списки dll'ек от которых они зависят. Ну и т.д. 

Автор: azesmcar 26.3.2010, 09:17
ссылки в помощь
http://www.codeguru.com/forum/archive/index.php/t-376151.html
http://www.codeguru.com/forum/showthread.php?t=327497&highlight=PE+format

Автор: GoldFinch 26.3.2010, 11:18
разумеется если программа грузит какие-то длл динамически, поиск по таблице импорта не поможет.

Автор: borisbn 26.3.2010, 15:16
azesmcar, спасибо. скачал http://www.codeguru.com/forum/attachment.php?attachmentid=9138&d=1107632246 со второй ссылки. Всё чётко понятно.

GoldFinch, ну, это-то понятно. не первый год "замужем" smile

А всё-таки, нет ли какого-нибудь API для этого, ибо не хочется лазать по exe-шнику (напоминает хакерство в худшем смысле этого слова). Да и я не удивлюсь, если M$ изменит формат PE в Windows 8 smile

Автор: borisbn 26.3.2010, 15:58
А вообще-то мне не это нужно было  smile   простите.
Кто-нибудь знает как в NSIS-скрипте узать зависимости exe-шника.
можно, конечно, написать свою библиотеку в формате NSIS и подавать в неё из скрипта имя exe, но может кто-нибудь встречал подобное ?

Автор: W4FhLF 26.3.2010, 16:34
И что ты хочешь из своей системы вытащить все нужный dll и поместить их в инсталлер? Это не очень хорошая идея. Лучше интегрировать в инсталлер необходимые packadges. 

Автор: borisbn 26.3.2010, 22:10
W4FhLF, Да, именно это и хочу. Думаю следует ввести список исключений для vc_redist например, но чтобы требуемые dll-ки Qt или ipp и т.п. встраивались в инсталлятор автоматически

Автор: W4FhLF 27.3.2010, 06:34
borisbn, я юзаю Inno Setup, там такого точно нет. Да я и сам не вижу смысла в этой feature. Dependencies релиза есть уже сформировавщийся набор зависимостей, который вряд будет меняться. Если и только сами библиотеки будут обновляться, но это не проблема для инсталлера, т.е. я в inno например пишу так:

Код

Source: "{$QTDIR}\bin\QtCore4.dll"; DestDir: "{app}"
Source: "{$QTDIR}\bin\QtGUI4.dll"; DestDir: "{app}"


Следовательно если обновляется Qt, то обновляется и инсталлер. 

Автор: borisbn 27.3.2010, 07:23
W4FhLF, у меня немало проектов, требующих инсталляторов. Проекты используют не только Qt, а ещё ipp. Есть старые проекты на Builder'е. Плюс к тому я работаю в команде, где у каждого похожая ситуация. Я бы хотел сделать один скриптик для всех, чтобы не приходилось каждый раз смотреть dependencies. 
В принципе как вариант можно сделать программку, копирующую все нужные dll в каталог с инсталлируемой программой, а в скрипте указать *.*

Автор: jonie 27.3.2010, 09:52
borisbn, создатель инсталлятора должен знать все зависимости, которые использует программа....я бы не стал доверять depends-walker-ам.....

Автор: borisbn 27.3.2010, 10:44
W4FhLF, jonie, уговорили, тем более, что у меня ещё куча динамически подгружаемых DLL. Закрываю.

azesmcar, ещё раз спасибо за полезные ссылки

Автор: SABROG 28.3.2010, 13:34
Я каждый раз мучаюсь при самостоятельной сборке QtCreator'a, пока его раз 15 не запустишь под depends.exe через F7 с динамическим профилированием, не понятно какие он .dll'ки цепляет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)