2012-07-10 7 views
6

Inno Setupを使用してアプリケーション用のインストーラを作成しています。インストーラは非常に基本的なもので、ファイルをコピーするだけです。これは非常にうまく動作し、私はそれに満足しています。インストール中にInno Setup起動ファイルを実行する(ドライバをインストールする)

私は最近、USBサポートを実装しており、そのためにIVIファンデーションから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; 

しかし、(私は「ドライバのインストールを開始する」ログエントリを見ることができますが)これは、インストールを開始しません。私の道に何か問題がありますか?私は間違って何をしているのですか?このスクリプトを変更してビット数に応じて自動的に適切な実行ファイルを選択する方法はありますか?

EDIT:[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 

これは非常にうまく動作します。この場合

答えて

8

、それはセットアッププロセスの最後に無条件に実行されるので、インストール後のフラグを削除するのが最善です(それが完成言う前に)、正しいのbitnessにそれを制限する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]エントリを使用できます。

+0

非常に良い、ありがとう、それは私が欲しかったものです! :) – brimborium

+1

私の質問の最後に私の最終的な解決策( '[Tasks]'エントリを追加)も追加しました。 – brimborium

+0

Thx、本当にタイプミス。 ;) – brimborium

関連する問題