URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3496
[ Назад ]

Исходное сообщение
"Handling DLL lack"

Отправлено Vladislav Lazarenko , 20-Окт-04 19:34 
Доброе время суток, господа. Столкнулся с проблемой в Windows (извиняюсь за оффтопик, но может быть кто-то знает), на этапе выполнения невозможно найти DLL, необходимую для работы программы, выдается соответствующее окошко. Все бы хорошо, но мне нужно без окошка, просто вернуть exit code и все. Знаю, что это можно реализовать прямо в этом бинарнике, но как?

Содержание

Сообщения в этом обсуждении
"Handling DLL lack"
Отправлено hatta , 20-Окт-04 21:17 
Может быть LoadLibrary?

"Handling DLL lack"
Отправлено Vladislav Lazarenko , 20-Окт-04 21:20 
>Может быть LoadLibrary?

Да нет, у меня программа собирается и линкуется с библиотекой статически ...
А на машине, где эта программа выполняется, некоторых библиотек нет. Так вот существует способ как то это проверить в исполняемой программе до возникновения ошибки. Но какой - не пойму. Что-то с SEH связано ...


"Handling DLL lack"
Отправлено qq , 20-Окт-04 22:37 
>>Может быть LoadLibrary?
>
>Да нет, у меня программа собирается и линкуется с библиотекой статически ...
>
>А на машине, где эта программа выполняется, некоторых библиотек нет. Так вот
>существует способ как то это проверить в исполняемой программе до возникновения
>ошибки. Но какой - не пойму. Что-то с SEH связано ...
>

Ошибка происходит не в программе, а в PE загрузчике, который не может найти нужный файл чтобы замаппить его в адресное пространство процесса


"Handling DLL lack"
Отправлено Vladislav Lazarenko , 20-Окт-04 22:39 
>>>Может быть LoadLibrary?
>>
>>Да нет, у меня программа собирается и линкуется с библиотекой статически ...
>>
>>А на машине, где эта программа выполняется, некоторых библиотек нет. Так вот
>>существует способ как то это проверить в исполняемой программе до возникновения
>>ошибки. Но какой - не пойму. Что-то с SEH связано ...
>>
>
>Ошибка происходит не в программе, а в PE загрузчике, который не может
>найти нужный файл чтобы замаппить его в адресное пространство процесса

Ты прав, но так происходит в UNIX и ничего с этим не поделать. А в Windows существует путь обхода ... Structured Exception Handling (SEH). Вопрос только как это организовать?


"Handling DLL lack"
Отправлено qq , 20-Окт-04 22:35 
>Доброе время суток, господа. Столкнулся с проблемой в Windows (извиняюсь за оффтопик,
>но может быть кто-то знает), на этапе выполнения невозможно найти DLL,
>необходимую для работы программы, выдается соответствующее окошко. Все бы хорошо, но
>мне нужно без окошка, просто вернуть exit code и все. Знаю,
>что это можно реализовать прямо в этом бинарнике, но как?

Вручную грузить библиотеку через LoadLibrary и получать адреса ф-ций через GetProcAddress


"Handling DLL lack"
Отправлено Vladislav Lazarenko , 20-Окт-04 22:38 
>>Доброе время суток, господа. Столкнулся с проблемой в Windows (извиняюсь за оффтопик,
>>но может быть кто-то знает), на этапе выполнения невозможно найти DLL,
>>необходимую для работы программы, выдается соответствующее окошко. Все бы хорошо, но
>>мне нужно без окошка, просто вернуть exit code и все. Знаю,
>>что это можно реализовать прямо в этом бинарнике, но как?
>
>Вручную грузить библиотеку через LoadLibrary и получать адреса ф-ций через GetProcAddress

Это не подойдет по дизайну, я же говорю, что линкуется с DLL при сборке.


"Handling DLL lack"
Отправлено sas , 21-Окт-04 02:18 
>Доброе время суток, господа. Столкнулся с проблемой в Windows (извиняюсь за оффтопик,
>но может быть кто-то знает), на этапе выполнения невозможно найти DLL,
>необходимую для работы программы, выдается соответствующее окошко. Все бы хорошо, но
>мне нужно без окошка, просто вернуть exit code и все. Знаю,
>что это можно реализовать прямо в этом бинарнике, но как?

Взгляните на

http://www.microsoft.com/msj/1298/win32/win321298.aspx

Удачи
--- sas


"Handling DLL lack"
Отправлено dimus , 21-Окт-04 08:09 
По моему тут легче будет изменить дизайн. На загрузку DLL потребуется написать три строчки кода. Плюс пара строчек на каждую функцию. А на отлавливание такой проблемы нестандартными средствами времени уйдет гораздо больше, да и насколько хорошо это будет работать? А лучше всего решать проблему на этапе _УСТАНОВКИ_.

"Handling DLL lack"
Отправлено Vladislav Lazarenko , 21-Окт-04 11:17 
>По моему тут легче будет изменить дизайн. На загрузку DLL потребуется написать
>три строчки кода. Плюс пара строчек на каждую функцию. А на
>отлавливание такой проблемы нестандартными средствами времени уйдет гораздо больше, да и
>насколько хорошо это будет работать? А лучше всего решать проблему на
>этапе _УСТАНОВКИ_.

С этим я совершенно согласен) Но ничего не могу поделать, ах уж эти коммерческие проекты :-(


"Handling DLL lack"
Отправлено Vladislav Lazarenko , 21-Окт-04 12:08 
>
>Взгляните на
>
>http://www.microsoft.com/msj/1298/win32/win321298.aspx
>
>Удачи
>--- sas

Добрый день, SAS! DelayLoad для DLL это то, что нужно! Спасибо!


"Handling DLL lack"
Отправлено Vladislav Lazarenko , 21-Окт-04 14:54 
>Доброе время суток, господа. Столкнулся с проблемой в Windows (извиняюсь за оффтопик,
>но может быть кто-то знает), на этапе выполнения невозможно найти DLL,
>необходимую для работы программы, выдается соответствующее окошко. Все бы хорошо, но
>мне нужно без окошка, просто вернуть exit code и все. Знаю,
>что это можно реализовать прямо в этом бинарнике, но как?

Итак, кого в будущем заинтересует эта тема, ответ прост...

Читаем:

http://www.microsoft.com/msj/1298/win32/win321298.aspx
http://msdn.microsoft.com/library/default.asp?url=/library/e...
http://bdn.borland.com/article/0,1410,28515,00.html

Если что, спрашивайте!