InnoSetup зависает после установки из-за dll

#inno-setup #freeze

#inno-setup #замораживание

Вопрос:

Я использую пользовательскую DLL внутри мастера InnoSetup.
Все работает хорошо.

За исключением того, что ПОСЛЕ успешного завершения установки основные окна графического интерфейса закрываются (как и ожидалось), но значок остается на панели задач.
(процесс установки все еще существует и может быть легко удален из диспетчера задач)

Я предполагаю, что DLL оставляет какой-то неизданный ресурс или ссылку, и код завершения InnoSetup ожидает его. Какие-либо намеки на конкретные ресурсы, которые ожидает IS?

Спасибо

Комментарии:

1. 1) Есть ли у вас исходники для этой dll? Проверьте их. 2) Проверьте функции экспорта для этой библиотеки, если какой-либо экспорт вызывается InitXYZ(), возможно, UNinitXYZ() тоже существует

Ответ №1:

После значительной отладки и выдергивания волос возникает тупиковый код завершения модуля Delphi.

Если потоки запускаются / завершаются в коде завершения, корректный код будет зависать, когда innosetup попытается освободить dll.

Я знаю, что процедуры DLL_THREAD_ATTACH сериализуются Windows, так что, вероятно, это проблема. Сам Innosetup написан на delphi, и это может быть воспроизведено простой программой defhi, которая вызывает delphi DLL, которая вызывает delphi DLL, которая передает код завершения потока в процедуре завершения модуля

Надеюсь, это поможет кому-то в будущем