слетает регистрация dll через какое-то время

evgen29
Дата: 18.12.2019 10:50:16
Здравствуйте! Уже не первый раз сталкиваюсь с интересной особенностью. У меня есть 32-х разрядная dll, написанная на delphi 7. В ней есть automation object, к которому обращается стороннее ПО периодически. Ни с того ни с сего спустя у кого месяц, у кого пару месяцев библиотека перестает отвечать на запрос. Не у всех так. У кого-то работает вполне нормально уже год-полтора. Т.е. даже создавая объект через vbs в cmd видно, что нет ошибки, но лог не пишется и никаких действий не выполняется. Лечится всё повторной регистрацией библиотеки через скрипт:
Set xOS=x64
If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86
If %xOS%==x64 (%windir%\SysWOW64\regsvr32.exe %MY_UNLOAD_PATH%\MyUnloader.dll) Else (%windir%\System32\regsvr32.exe %MY_UNLOAD_PATH%\MyUnloader.dll)
Pause


Если библиотека ранее не была зарегистрирована, то скрипт конечно ругается. А так и не ругается и работы никакой не делает, пока повторно не зарегистрируешь. Какой-то глюк винды возможно. Может кто сталкивался с подобным поведением?
Dimitry Sibiryakov
Дата: 18.12.2019 13:24:53

evgen29
Может кто сталкивался с подобным поведением?

Много раз.

"Если программа не работает так как нужно, значит в ней баг." (с) мой

Не пытайся валить на винду, ищи конкретную причину "не отвечания". Пиши логи, снимай call
stack из Process Explorer. В общем, отлаживайся.

Posted via ActualForum NNTP Server 1.5

Кроик Семён
Дата: 18.12.2019 14:21:17
evgen29,

мысль: а вдруг это антивирус периодически шалит? По-тихому, просто пишет об этом в лог и блокирует ActiveX.
Dimitry Sibiryakov
Дата: 18.12.2019 14:38:41

Кроик Семён
По-тихому

Без ошибки при создании СОМ-объекта? Это вряд ли.

Posted via ActualForum NNTP Server 1.5

evgen29
Дата: 18.12.2019 15:10:29
Dimitry Sibiryakov, Так в том то и дело, что лог самую первую запись делает в секции initialization модуля логов. Т.е. если даже com-объект невесть как работает с багами, то первая запись в лог все-равно должна попасть. А получается, что через какое-то кол-во месяцев даже лог перестает создаваться, хоть при создании com-объекта ошибку не выдает. Под правами администратора то же самое. И только после повторной регистрации либа начинает работать как ни в чём не бывало. Причём это не у всех пользователей, коих сто или двести по проекту. А выборочно у штук пяти такая шляпа возникала. Проект представляет из себя выгрузку данных из локальной БД пользователя по запросу из системы автоматизации. Вот я и грешил на винду или антивирус. Выгрузка произошла и библиотека выгружается из памяти, поскольку ссылок на com-объект не остаётся. Мне показалось это странным вот я и решил, что кто-то с похожим поведением уже сталкивался.
Dimitry Sibiryakov
Дата: 18.12.2019 15:39:18

evgen29
Так в том то и дело, что лог самую первую запись делает в секции initialization модуля
логов. Т.е. если даже com-объект невесть как работает с багами, то первая запись в лог
все-равно должна попасть. А получается, что через какое-то кол-во месяцев даже лог
перестает создаваться, хоть при создании com-объекта ошибку не выдает.

Значит вариантов два:
1) До инициализации не доходит.
2) Создание лога обламывается с ошибкой.

Поэтому надо ловить момент появления бага, снимать стэки вызовов, возможно даже дамп
памяти и копаться в нём.

Posted via ActualForum NNTP Server 1.5

sql2012
Дата: 18.12.2019 15:43:58
evgen29,
а dll подписана?

p.s. и "куда" она пишет?
ОС может подменять путь на "нужный", виртуальный, для совместимости (хотя не этот случай, думаю)
Barlone
Дата: 18.12.2019 15:50:52
evgen29, в реестр посмотрите, что там с регистрацией: кто-то запись удаляет или меняет на что-то левое.