2011-07-25 52 views
8

の前にバッチファイルを実行する現在、バッチファイルは[実行]セクションにあります。バッチファイルを[Files]セクションの前に実行する必要があります。 Inno Setupでこれを行う方法はありますか?現在、[実行]セクションは常に[ファイル]セクションの後に実行されます。Inno Setup [ファイル]セクション

[Run] 
Filename: "C:\Users\Scripts\Install\Install.bat"; Parameters: {code:GetDatabaseName} 

[Files] 
Source: "C:\Users\MyApp\*"; DestDir: "\\MyServer\MyApp"; Flags: recursesubdirs createallsubdirs 

答えて

11

セットアップの最初に行う必要がある場合は、PrepareToInstall()またはCurStepChanged(ssInstall)イベント機能でExec()を使用してください。 これらは両方とも、ユーザーが「インストールしてください」と言った後、何かの前にあります。 PrepareToInstall()でも、良い警告でインストールをキャンセルすることができます。

ファイルは、最初のセットアップから抽出する必要がある場合、あなたはExtractTemporaryFile()

+0

+1と提案に感謝し、そのルートを試してみましょう。 – odez213

5

InitializeSetupイベント+いくつかのパスカルスクリプトを使用できます。

を参照してください。 How to run a file before setup with Inno Setup

この例では説明しません。インストーラからファイルを取得するには、ExtractTemporaryFile('your.bat')、次にExec(ExpandConstant('{tmp}\your.bat ...を実行します。

+0

私はユーザーの入力値を取得する必要がありますので、私はセットアップ後に、それを必要としていました。 – odez213

+0

+1の提案 – odez213

4

継続ディアナの偉大な答えは、コード例でそれをpreceedことができます。

[code] 
function PrepareToInstall(var NeedsRestart: Boolean): String; 
var 
    ResultCode: integer; 
begin 
    Exec(ExpandConstant('{app}\serviceDeployment\unInstallService.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) 
end; 

このコードは常に空の文字列を返し、セットアップが続行されます。 設定を中止したい場合は(何らかのエラーの場合)、空でない文字列を返す必要があり、それがユーザーに表示されます(セットアップが停止されます)。 PrepareToInstallの中で、この行を追加します。エラー文字列を返すために

​​
+0

さて、 'Exec'が失敗した場合、または実行されたターゲットがエラーを返す場合(この場合、特定の' ERRORLEVEL'を返すバッチスクリプト)、エラーを処理する方法を示すことは公正でしょう。 – TLama

+0

Execはブール値です。真か偽かをチェックすることができます。 とResultCodeにはエラーコードが含まれています。 実行されていない場合(.........)then begin 結果:= 'エラーの説明'; 終了 – Danielle