2010-12-14 75 views
6

inno setupで作成したインストーラの[code]セクションの関数からインストールを終了することはできますか?Inno Setupからの終了[code]

私は、終了コードの設定に興味はありません。私がやりたいことは、要件のカスタムチェックを実行し、その要件が以前にインストールされていない場合はインストールを終了することです。

+1

**はい、それは可能です。**あなたが誰かがあなたのためにコードを書くことを望んでいますか? '[code']セクションの下にすでにあるコードを投稿することはできますか? –

+0

質問はここで答えられました:http://stackoverflow.com/questions/6345920/inno-setup-how-to-abort-terminate-setup-during-install – 010110110101

答えて

3

InnoSetupヘルプのInitializeSetupとAbortを見てください。コーディが言ったように、それは可能です。あなたが問題を抱えているなら、あなたがやったこととあなたが持っている問題を投稿してください。

0

コードセクションのどこかでチェックを行います。右? このチェックの結果、インストールを終了します。終了を実行するに はラインを入れて:

PostMessage (WizardForm.Handle, $0010, 0, 0); { quit setup, $0010=WM_CLOSE } 

うまくいけば、これは

+0

これはサイレントモード( '/silent') –

7

を助け、私はそれを行う方法がある:

procedure ExitProcess(exitCode:integer); 
    external '[email protected] stdcall'; 

そして、それを使用する方法は次のとおりです。

[Code] 
    if .... then begin 
    ExitProcess(0); 
    end; 
+1

これはユーザーの観点からはうまくいくと思われますが、一時ファイルが残っています。 – gogowitsch

+0

この回答は、この問題を回避すると思われるWizard.Closeを使用しています。 http://stackoverflow.com/questions/6345920/inno-setup-how-to-abort-terminate-setup-during-install – 010110110101

+0

ここで、ユーザーが終了したい場合にのみプロンプトを抑制することができます。 –

10

Abort()あなたがこれらにいる場合は、イベント:

InitializeSetup 
InitializeWizard 
CurStepChanged(ssInstall) 
InitializeUninstall 
CurUninstallStepChanged(usAppMutexCheck) 
CurUninstallStepChanged(usUninstall) 
3

だけInitializeSetupからFalseを返し、前提条件のテストが失敗したとき、実行されているからインストーラを防ぐため。これは、ウィザードが表示される前でもインストーラーを終了します。

function InitializeSetup(): Boolean; 
begin 
    Result := True; 

    if not PrerequisitesTest then 
    begin      
    SuppressibleMsgBox('Prerequisites test failed', mbError, MB_OK, MB_OK); 
    Result := False; 
    end; 
end; 

enter image description here


前提条件をテストする必要がある場合は、インストールが(すなわちInitializeSetupが早すぎる)のみを開始する直前に、あなたはCurStepChanged(ssInstall)からAbort functionを呼び出すことができます。

procedure CurStepChanged(CurStep: TSetupStep); 
begin 
    if CurStep = ssInstall then 
    begin 
    if not PrerequisitesTest then 
    begin      
     SuppressibleMsgBox('Prerequisites test failed', mbError, MB_OK, MB_OK); 
     Abort; 
    end; 
    end; 
end; 

enter image description here


けれども、このシナリオのために、PrepareToInstall event functionメカニズムを使用して、代わりにセットアップを終了することを検討してください。

function PrepareToInstall(var NeedsRestart: Boolean): String; 
begin 
    Result := ''; 

    if not PrerequisitesTest then 
    begin      
    Result := 'Prerequisites test failed'; 
    end; 
end; 

enter image description here


あなたは、インストーラを終了し、他の時間を強制ExitProcess WinAPIのコールを使用する必要がある場合:これはかなり危険なの出口ですが

procedure ExitProcess(uExitCode: Integer); 
    external '[email protected] stdcall'; 

function NextButtonClick(CurPageID: Integer): Boolean; 
begin 
    if CurPageID = wpReady then 
    begin 
    if not PrerequisitesTest then 
    begin      
     SuppressibleMsgBox('Prerequisites test failed', mbError, MB_OK, MB_OK); 
     ExitProcess(1); 
    end; 
    end; 
    Result := True; 
end; 

を、それを使用します最後の手段としてのみ使用します。

enter image description here


関連する問題