Подтвердить что ты не робот

Inno Setup: установите другой установщик и запустите его, прежде чем продолжить установку.

Это часть [Files] моего кода:

[Files]
Source: "other_installer.exe"; DestDir: "{app}"
Source: "myprogram.exe"; DestDir: "{app}"
Source: "data.dat"; DestDir: "{app}"
Source: "otherdata.dat"; DestDir: "{app}"

Моя программа зависит от запуска другой программы. Я включил установщик для этой программы ( "other_installer.exe" ) в мой установщик. То, что я хотел бы сделать, это запустить этот установщик, как только он будет скопирован, прежде чем продолжить с "myprogram.exe" и остальными.

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

[Files]
Source: "other_installer.exe"; DestDir: "{app}"
Source: "myprogram.exe"; DestDir: "{app}"; BeforeInstall: // RUN OTHER_INSTALLER.EXE //
Source: "data.dat"; DestDir: "{app}"
Source: "otherdata.dat"; DestDir: "{app}"
4b9b3361

Ответ 1

Лучше для вашего пути может быть параметр AfterInstall. Следующий script будет выполнять функцию 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;

Ответ 2

Еще одно подходящее время для запуска установщиков обязательных условий находится в функции события PrepareToInstall. (См. Примеры скриптов, предоставленных Inno для базовой структуры, и код TLama для фактического выполнения.)

Основным преимуществом PrepareToInstall является то, что он позволяет обрабатывать ошибки и перезагружать запросы от дочернего установщика - с помощью AfterInstall нет.

Основной недостаток этого заключается в том, что вам нужно вручную ExtractTemporaryFile выполнить все, что требуется для запуска установки child, поскольку это происходит до того, как файлы будут извлечены.

Ответ 3

Вы можете использовать AfterInstall, ищите это в Справке. Когда файл просто скопирован, я запустил функцию/процедуру, которую вы поместили как "AfterInstall:".

В этой функции/процедуре используйте Exec и запустите другой установщик.