web-dev-qa-db-ja.com

Inno Setup:他のインストーラーをインストールし、インストールを続行する前に実行します

これは、これまでの私のコードの[ファイル]部分です。

[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」などを続行することです。

私はグーグルで調べて、Inno Setup HelpでBeforeInstallのドキュメントを見つけましたが、別のアプリケーションを実行する例はありません。私はそれがこのようなものでなければならないと信じています:

[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}"
24
Juicy

AfterInstall パラメーターを使用する方がよいでしょう。次のスクリプトは、OtherInstaller.exeファイルエントリが処理された直後にRunOtherInstaller関数を実行します。そこでインストールされた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;
32
TLama

前提条件インストーラーを実行するもう1つの良い時期は、PrepareToInstallイベント関数です。 (基本構造についてはInnoで提供されるサンプルスクリプトを、実際の実行についてはTLamaのコードを参照してください。)

PrepareToInstallの主な利点は、エラーを処理し、子インストーラーからのリブート要求を可能にすることです。AfterInstallを使用してもできません。

主な欠点は、子インストールの実行に必要なものを手動でExtractTemporaryFile必要とすることです。これは、ファイルが抽出される前に発生するためです。

10
Miral

AfterInstallを使用できます。ヘルプでこれを探してください。ファイルがコピーされたばかりのとき、「AfterInstall:」として指定した関数/手順を起動します。

この関数/手順では、Execを使用して他のインストーラーを起動します。

1
Leo_Italy