Inno Setupを使用して、アプリケーションのインストーラーを作成しています。インストーラーは非常に基本的で、いくつかのファイルをコピーするだけです。これは非常にうまく機能し、私はそれに満足しています。
最近USBサポートを実装しましたが、そのためにIVIFoundationからUSBドライバーをインストールする必要があります。これは基本的に、セットアッププロセス中にどこかで起動する必要があるexeファイルです。これまで、ユーザーはドライバーを個別にインストールする必要がありますが、これはそれほどエレガントではありません。私の最初のアプローチはこれでした:
[Run]
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; Description: "Install USB driver (IVI Foundation)"; Flags: postinstall skipifsilent
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; Description: "Install 64bit USB driver (IVI Foundation)"; Flags: postinstall skipifsilent
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: postinstall skipifsilent
これは機能しますが、ユーザーは正しいビット数を選択する必要があります。ここでの利点は、彼がそれをインストールしないことを選択できることです(この場合、アプリケーションは問題のないUSB機能を無視するだけです)。私が実際に望んでいるのは、システムのビット数を自動的に検出し、セットアッププロセスを実行することです。これは[Run]
セクションにある必要はありませんが、私はそれに反対するものは何もありません(ユーザーがインストールしないことを選択できるため)。
また、いくつかのコードを見つけて、次のように実行しようとしました。
[Code]
procedure CurStepChanged (CurStep: TSetupStep);
var
WorkingDir: String;
ReturnCode: Integer;
begin
if (ssInstall = CurStep) then
Log('Starting driver installation');
WorkingDir := ExpandConstant ('{app}\driver');
Exec ('IviSharedComponents_2.2.1.exe', '', WorkingDir, SW_SHOW, ewWaitUntilTerminated, ReturnCode);
end;
ただし、これではインストールは開始されません(ただし、「ドライバーのインストールの開始」というログエントリが表示されます)。私の道に何か問題がありますか?何が間違っているのでしょうか。また、このスクリプトを変更して、ビット数に応じて適切な実行可能ファイルを自動的に選択するにはどうすればよいですか。
編集:私は[Tasks]
エントリで提案されたソリューションを使用しました。実装は次のようになります(参照用):
[Tasks]
Name: "install_usb"; Description: "Install USB drivers (IVI Foundation)"; GroupDescription: "External drivers:";
[Run]
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Tasks: install_usb; Flags: skipifsilent
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Tasks: install_usb; Flags: skipifsilent
これは非常にうまく機能します、あなたの助けに感謝します!