Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Решение проблемы импорта зависимых DLL в Inno Setup: пошаговое руководство

Delphi , Файловая система , DLL и PlugIns

При разработке приложений с использованием Delphi и Pascal, часто возникает необходимость работы с динамически подключаемыми библиотеками (DLL). Одной из задач, с которой может столкнуться разработчик, является необходимость импорта DLL с зависимостями при установке и удалении приложения в среде Inno Setup. Давайте рассмотрим, как можно решить эту задачу.

Описание проблемы

Разработчик столкнулся с проблемой импорта двух DLL-библиотек (StatisticInstallInfo.dll и adcore.dll) в процедуры Installed и Uninstalled установщика Inno Setup. Пример кода, представленный в вопросе, демонстрирует попытку импорта функций из DLL, но процесс удаления приложения приводит к ошибке.

procedure Installed();
external 'Installed@files:StatisticInstallInfo.dll,adcore.dll cdecl  setuponly ';

procedure Uninstalled();
external 'Uninstalled@{app}\StatisticInstallInfo.dll cdecl  uninstallonly';

В разделе [Files] определены источники и директории назначения для обеих DLL, но импорт adcore.dll в процедуру Uninstalled не работает.

Подтвержденное решение

Ключевым моментом является то, что при установке Inno Setup имеет доступ к содержимому пакета, и может извлечь необходимые файлы, используя синтаксис files:file1.dll,file2.dll. Однако при удалении установщик уже не имеет доступа к содержимому пакета, поэтому необходимо самостоятельно извлечь файлы в процессе установки с помощью обычной записи [Files].

Вот как должен быть организован раздел [Files] и процедуры Installed и Uninstalled:

[Files]
Source: "StatisticInstallInfo.dll"; DestDir: "{app}"
Source: "adcore.dll"; DestDir: "{app}"

И соответствующие процедуры в разделе [Code]:

procedure Installed();
external 'Installed@files:StatisticInstallInfo.dll,adcore.dll cdecl setuponly';

procedure Uninstalled();
external 'Uninstalled@{app}\StatisticInstallInfo.dll cdecl uninstallonly';

Если процедуры вызываются после самой установки, можно использовать просто {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 должен быть использован для поиска зависимостей при загрузке.

Для более глубокого понимания того, как правильно использовать этот флаг, рекомендуется обратиться к Loading DLL with dependencies in Inno Setup fails in uninstaller with “Cannot import DLL”, but works in the installer.

Заключение

Используя данное руководство, разработчики смогут успешно импортировать зависимые DLL в процедуры установки и удаления приложения, используя Inno Setup в своих проектах на Delphi и Pascal.

Создано по материалам из источника по ссылке.

У пользователя возникла проблема с импортом зависимых DLL в процедуры установки и удаления приложения в среде Inno Setup, и требуется пошаговое руководство по решению этого вопроса.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: DLL и PlugIns ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-10 13:24:05/0.0034801959991455/0