Также, если вы используете сторонние библиотеки, убедитесь, что у вас есть правильные 32/64 битные файлы
Лучше для вашего пути может быть параметр AfterInstall
. Следующий скрипт выполнит функцию RunOtherInstaller
сразу после обработки записи файла OtherInstaller.exe
. Там он пытается выполнить только что установленный файл OtherInstaller.exe
, и если это не удается, он сообщает пользователю об ошибке. Обратите внимание, что вы не можете прервать установку из этой функции, поэтому не так безопасно делать то, что вы хотите таким образом:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
[Files]
Source: "OtherInstaller.exe"; DestDir: "{app}"; AfterInstall: RunOtherInstaller
Source: "OtherFile.dll"; DestDir: "{app}"
[Code]
procedure RunOtherInstaller;
var
ResultCode: Integer;
begin
if not Exec(ExpandConstant('{app}\OtherInstaller.exe'), '', '', SW_SHOWNORMAL,
ewWaitUntilTerminated, ResultCode)
then
MsgBox('Other installer failed to run!' + #13#10 +
SysErrorMessage(ResultCode), mbError, MB_OK);
end;
Вы можете использовать AfterInstall, ищите это в справке. Когда файл только что скопирован, я запустил функцию / процедуру, которую вы поставили как «AfterInstall:».
В этой функции / процедуре используйте Exec и запустите другой установщик.
Еще одно подходящее время для запуска установщиков обязательных условий - в функции события PrepareToInstall
. (См. Примеры скриптов, предоставленных Inno для базовой структуры, и код TLama для фактического выполнения.)
Основное преимущество PrepareToInstall
заключается в том, что он позволяет обрабатывать ошибки и перезагружать запросы от ребенка установщик - с помощью AfterInstall
нет.
Основной недостаток этого заключается в том, что вам нужно вручную ExtractTemporaryFile
что-либо, необходимое для запуска дочерней установки, поскольку это происходит до того, как файлы будут извлечены.