При разработке приложений с использованием Delphi и Pascal, часто возникает необходимость работы с динамически подключаемыми библиотеками (DLL). Одной из задач, с которой может столкнуться разработчик, является необходимость импорта DLL с зависимостями при установке и удалении приложения в среде Inno Setup. Давайте рассмотрим, как можно решить эту задачу.
Описание проблемы
Разработчик столкнулся с проблемой импорта двух DLL-библиотек (StatisticInstallInfo.dll и adcore.dll) в процедуры Installed и Uninstalled установщика Inno Setup. Пример кода, представленный в вопросе, демонстрирует попытку импорта функций из DLL, но процесс удаления приложения приводит к ошибке.
В разделе [Files] определены источники и директории назначения для обеих DLL, но импорт adcore.dll в процедуру Uninstalled не работает.
Подтвержденное решение
Ключевым моментом является то, что при установке Inno Setup имеет доступ к содержимому пакета, и может извлечь необходимые файлы, используя синтаксис files:file1.dll,file2.dll. Однако при удалении установщик уже не имеет доступа к содержимому пакета, поэтому необходимо самостоятельно извлечь файлы в процессе установки с помощью обычной записи [Files].
Вот как должен быть организован раздел [Files] и процедуры Installed и Uninstalled:
Если процедуры вызываются после самой установки, можно использовать просто {app}\StatisticInstallInfo.dll в обоих случаях.
Альтернативные решения и дополнительные замечания
В случае, если зависимости между DLL не учитываются корректно, может потребоваться использование флага loadwithalteredsearchpath. Это позволяет загрузить DLL, указав путь к файлам, которые она зависит, в частности, когда работа идет в контексте деинсталяции.
Пример с использованием флага loadwithalteredsearchpath
procedure Uninstalled;
var
ResultCode: Integer;
begin
ResultCode := NativeUninstall('{app}\StatisticInstallInfo.dll', 'Uninstalled', '', '', False, True, loadwithalteredsearchpath, '{app}');
if ResultCode <> 0 then
MsgBox('Ошибка при вызове Uninstalled: ' + IntToStr(ResultCode), mb_error, 'Ошибка');
end;
Данный флаг позволяет указать, что путь к основной DLL должен быть использован для поиска зависимостей при загрузке.
Используя данное руководство, разработчики смогут успешно импортировать зависимые DLL в процедуры установки и удаления приложения, используя Inno Setup в своих проектах на Delphi и Pascal.
У пользователя возникла проблема с импортом зависимых DLL в процедуры установки и удаления приложения в среде Inno Setup, и требуется пошаговое руководство по решению этого вопроса.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.