Как использовать библиотеки DLL с зависимостями во время установки и удаления в Inno Setup?

Я хочу импортировать две dll в свой .iss при удалении приложения. Я не могу найти способ сделать это.

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

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

Я тоже хочу импортировать adcore.dll в процедуру Uninstalled. И это не удалось, как показано ниже;

[Files]
Source: {#MyDefaultPackDir}\adcore.dll; DestDir: "{app}"
Source: {#MyDefaultPackDir}\StatisticInstallInfo.dll; DestDir: "{app}"
[Code]
procedure Uninstalled();
external 'Uninstalled@files:StatisticInstallInfo.dll,adcore.dll cdecl  uninstallonly';

Это не работает.

Installed() и Uninstalled() находятся в StatisticInstallInfo.dll, что зависит от adcore.dll.


person user861491    schedule 25.09.2012    source источник


Ответы (1)


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

Во время удаления Inno больше не имеет доступа к содержимому установки, поэтому ему нужно полагаться на все, что вы извлекли во время установки, используя обычную запись [Files]. Из-за этого он больше не заботится о зависимостях и оставляет это на ваше усмотрение.

[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';

В зависимости от того, когда вы вызываете эту функцию (если после самой установки), вы можете отказаться от синтаксиса files:... и просто использовать {app}\StatisticInstallInfo.dll в обоих случаях.

person Deanna    schedule 25.09.2012
comment
вы имеете в виду, что я использую {app}\StatisticInstallInfo.dll. и он автоматически вызывает функцию в adcore.dll? - person user861491; 25.09.2012
comment
Да, это обрабатывается вашим StatisticInstallInfo.dll как во время установки, так и во время удаления. files:a.dll,b.dll просто вызывает извлечение обоих, не более того. Установка их обоих в {app} делает то же самое, просто гарантирует, что они оба будут извлечены для использования. - person Deanna; 25.09.2012