2009-05-22 59 views
1

Innoセットアップを使用して私の製品をインストールしていますセットアップでこのプログラムがキャンセルまたは中止された場合はexternプログラム(Validator.exe)を実行します。自分のインストーラをキャンセルする必要があります。Inno Setupを使用してインストーラをキャンセルするには?

{app}パスにValidator.exeを保存して実行します。

インストーラが実行されているときにValidator.exeファイルが呼び出され、実行結果が得られます。 Exec(ExpandConstant( '{app} /Validator.exe')、 ''、 ''、SW_SHOW、ewWaitUntilTerminated 、ResultCode)。

しかし、これは私が試したすべての解決策で問題が発生している:

InitializeSetup:Validator.exeファイルは{}のアプリにコピーされていない、まだ、それが実行されることはありませんが。

アボート:(InitializeSetup、InitializeWizard、CurStepChanged(ssInstall))でのみ呼び出すことができます。この場合、バリデータはまだコピーされません。

DeinitializeSetup:インストール後にValidator.exeを実行できますが、この時点からマイインストーラを中止することはできません。

Validator.exeがコピーされて実行された後、インストールをキャンセルするには何らかの方法が必要です。アンインストールを呼び出すことはできますが、できませんでした。

ありがとうございました。

答えて

2

Innoセットアップでは、「外部」ファイルはではなく、がインストーラーEXEファイルに含まれています。これは外部的に存在し、おそらくインストーラEXEファイルとは別のファイルとして含まれています。 InitializeSetupイベントの中でAbortを呼び出さない理由は、検証プログラムがまだ{app}ディレクトリにコピーされていないということです。その時点で、ユーザーはインストール先を指定する必要がないためです。しかし、バリデーターが宛先ディレクトリにある必要はありません。すでに外部ファイルなので、すでに入っているディレクトリから実行するだけです。

また、必要な検証機能をDLLに組み込むこともできます。インストーラにDLLを含めることができ、Inno SetupはDLLを一時的な場所に抽出して、インストールスクリプトからその関数を呼び出すことができます。

2

ありがとうございます。これは私がそれを修正した方法です:

function InitializeSetup(): Boolean;. 
var 
    ResultCode : Integer; 
begin 
    Result := True; 
    ExtractTemporaryFile('Validator.exe'); 

    if Exec(ExpandConstant('{tmp}\Validator.exe'), '', '', SW_SHOW, 
    ewWaitUntilTerminated, ResultCode) 
    then begin 
    if not (ResultCode = 0) then begin 
     Result := false; 
    end; 
    end; 
end; 
関連する問題