11

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

これは非常にうまく機能します、あなたの助けに感謝します!

4

1 に答える 1

14

この場合、セットアップ後のフラグを削除して、セットアッププロセスの最後(ただし、終了する前)に無条件に実行されるようにし、Check:パラメーターを追加して正しいビット数に制限することをお勧めします。

[Run]
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Flags: skipifsilent
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Flags: skipifsilent

[Tasks]これを条件付きにする場合は、セットアップが開始する前にプロンプ​​トを表示する通常のエントリを使用できます。

于 2012-07-10T16:17:14.590 に答える