Непонятное переполнение стека

Desil

Всем доброго дня!Есть программа (delphi 6 + ADO + MSSQL 2000), которая прекрасно работает на все компьютерах сети кроме одного. Этот компьютер не введен в домен, сеть там как-то хитро настроена (но сервер MSSQL с него пингуется из командной строки). На этом компьютере стоит локально скуль (для каких-то своих целей). При запуске программы появляется сообщение, что прога выполнила недопустиму операцию и будет закрыта (конец). В логах системы сообщение:
Приложение ... вызвало ошибку Ошибка в 06/10/2006 @ 12:08:32.779 Вызвано исключение c00000fd по адресу 7C8024E5 (kernel32!ReleaseMutex)
В начале программы такой текст:
<b>begin</b>
 ShowMessage('1');
 Application.Initialize;
 ShowMessage('2');
 Application.CreateForm(TfmMain, fmMain);
 ShowMessage('3');
 Application.CreateForm(TfmLoginWin, fmLoginWin);
 ShowMessage('4');
 <b>if</b> <b>not</b> InitSystem <b>then</b>
 exit;
и т.д.Естественно никакие сообщения не появляеются перед сообщением о том, что программа будет закрыта.Вроде как исключение c00000fd - переполнение стека... В опциях проекта указаны размеры стека от $00100000 до $01000000...Даже и не знаю, чего делать-то...
10 ответов

Desil

смотреть TDUMP.EXE myprog.exe на предмет использования static-load dll


Desil

Как узнать, какие из экспортируемых длл являются static-load-ами?


Desil

позавчера была аналогичная ошибка в похожей ситуации, вот ее описание:1) программа должна коннектиться к Oracle-серверу в сети2) если не поставлен Oracle-клиент, вылетает такая ошибка. Предполагаю, происходит обращение к неустановленным dll-кам3) 2 дня назад поставил прогу на Windows XP Prof. Поставил клиент Oracl'a из-под администратора. 4) Если пытаюсь запустить мою программу, залогинившись в Windows как пользователь с ограниченными правами - сообщение об ошибке, которое мы уже видели. Стоит только дать этому пользователю администраторские права - все снова впорядке.5) Данную проблему на Windows XP Home не наблюдал и как починить в Pro не знаю. Почему остальные программы (IE, Outlook и т.д.) ошибку не производят, не знаю.


Desil

позавчера была аналогичная ошибка в похожей ситуации, вот ее описание:1) программа должна коннектиться к Oracle-серверу в сети2) если не поставлен Oracle-клиент, вылетает такая ошибка. Предполагаю, происходит обращение к неустановленным dll-кам3) 2 дня назад поставил прогу на Windows XP Prof. Поставил клиент Oracl'a из-под администратора. 4) Если пытаюсь запустить мою программу, залогинившись в Windows как пользователь с ограниченными правами - сообщение об ошибке, которое мы уже видели. Стоит только дать этому пользователю администраторские права - все снова впорядке.5) Данную проблему на Windows XP Home не наблюдал и как починить в Pro не знаю. Почему остальные программы (IE, Outlook и т.д.) ошибку не производят, не знаю.
2) Конечно, если у вас прога ориентирована под прямое обращение к OCI, то именно oci.dll он и не находит.3) попробуйте зайти в regedit и дать права на запись проблемному пользователю в ветку реестра HKLM\Software\Oracle (со всеми подветками)


Desil

позавчера была аналогичная ошибка в похожей ситуации, вот ее описание:1) программа должна коннектиться к Oracle-серверу в сети2) если не поставлен Oracle-клиент, вылетает такая ошибка. Предполагаю, происходит обращение к неустановленным dll-кам3) 2 дня назад поставил прогу на Windows XP Prof. Поставил клиент Oracl'a из-под администратора. 4) Если пытаюсь запустить мою программу, залогинившись в Windows как пользователь с ограниченными правами - сообщение об ошибке, которое мы уже видели. Стоит только дать этому пользователю администраторские права - все снова впорядке.5) Данную проблему на Windows XP Home не наблюдал и как починить в Pro не знаю. Почему остальные программы (IE, Outlook и т.д.) ошибку не производят, не знаю.
Как узнать, какие длл установлены в системе (комп пришел вместе с оборудованием и ОС + какое-то ПО ставили туда левые чуваки, поэтому переустановить винду никто не даст)?


Desil

Как узнать, какие из экспортируемых длл являются static-load-ами?
Все используемые приложением DLL, которые вы не загружаете через LoadLibrary, а используете путем определения внешней процедуры (в вашей программе, в используемых компонентах, в стандартных модулях), являются static-load, т.е. загружаются при открытии приложения.Есть много программ для просмотра ресурсов исполняемых файлов Windows, в том числе и той их заголовочной части, где перечисляюются статически подгружаемые DLL. Я с давних времен помню exeScope.Хотя обычно при отсутствии статически загружаемых библиотек программа выдает ошибку с прямым указанием, чего именно она не находит.


Desil

2 A.K.Спасибо, вот уж не ожидал ответа. Очень благодарен.


Desil

Все используемые приложением DLL, которые вы не загружаете через LoadLibrary, а используете путем определения внешней процедуры (в вашей программе, в используемых компонентах, в стандартных модулях), являются static-load, т.е. загружаются при открытии приложения.Есть много программ для просмотра ресурсов исполняемых файлов Windows, в том числе и той их заголовочной части, где перечисляюются статически подгружаемые DLL. Я с давних времен помню exeScope.Хотя обычно при отсутствии статически загружаемых библиотек программа выдает ошибку с прямым указанием, чего именно она не находит.
Все равно не понятно, почему если программа не находит библиотеку, она не говорит какую... И как узнать, какую библиотеку она не находит?


Desil

Desil wrote:> Как узнать, какие из экспортируемых длл являются static-load-ами?Например, с помощью TDUMP-а (неудобно, но зато идёт в комплекте эхотага :)). Ещё можно посмотреть FileMon-ом, на загрузке чего оно умирает (если, конечно, оно умирает на загрузке чего-то).


Desil

Все равно не понятно, почему если программа не находит библиотеку, она не говорит какую... И как узнать, какую библиотеку она не находит?
1. значит нашла (раз нет сообщения)2. сначала MDAC накати на машину3. либо из под отладки в Delphi запусти.