[Code]
Inno Setup で作成されたインストーラーのセクションの関数からインストールを終了することはできますか?
終了コードの設定には興味がありません。要件のカスタム チェックを実行し、その要件が以前にインストールされていない場合はインストールを終了します。
[Code]
Inno Setup で作成されたインストーラーのセクションの関数からインストールを終了することはできますか?
終了コードの設定には興味がありません。要件のカスタム チェックを実行し、その要件が以前にインストールされていない場合はインストールを終了します。
インストーラーが実行されないようにするには、前提条件のテストが失敗したときにFalse
、InitializeSetup
. これにより、ウィザードが表示される前でもインストーラーが終了します。
function InitializeSetup(): Boolean;
begin
Result := True;
if not PrerequisitesTest then
begin
SuppressibleMsgBox('Prerequisites test failed', mbError, MB_OK, IDOK);
Result := False;
end;
end;
インストールを開始する直前にのみ前提条件をテストする必要がある場合 (つまり、インストールがInitializeSetup
早すぎる場合)、次のAbort
関数から関数を呼び出すことができますCurStepChanged(ssInstall)
。
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
if not PrerequisitesTest then
begin
SuppressibleMsgBox('Prerequisites test failed', mbError, MB_OK, IDOK);
Abort;
end;
end;
end;
ただし、このシナリオでは、セットアップを終了する代わりに、PrepareToInstall
イベント関数メカニズムを使用することを検討してください。
function PrepareToInstall(var NeedsRestart: Boolean): String;
begin
Result := '';
if not PrerequisitesTest then
begin
Result := 'Prerequisites test failed';
end;
end;
それ以外のときにインストーラーを強制終了する必要がある場合は、ExitProcess
WinAPI 呼び出しを使用します。
procedure ExitProcess(uExitCode: Integer);
external 'ExitProcess@kernel32.dll stdcall';
function NextButtonClick(CurPageID: Integer): Boolean;
begin
if CurPageID = wpReady then
begin
if not PrerequisitesTest then
begin
SuppressibleMsgBox('Prerequisites test failed', mbError, MB_OK, IDOK);
ExitProcess(1);
end;
end;
Result := True;
end;
これはかなり危険な出口ですが、最後の手段としてのみ使用してください。外部 DLL をロードしている場合は、クラッシュを避けるために、最初にアンロードする必要がある場合があります。これも、一時ディレクトリをクリーンアップしません。
次のイベントにいる場合は、Abort()を使用できます。
InitializeSetup
InitializeWizard
CurStepChanged(ssInstall)
InitializeUninstall
CurUninstallStepChanged(usAppMutexCheck)
CurUninstallStepChanged(usUninstall)
私がそれを行う方法は次のとおりです。
procedure ExitProcess(exitCode:integer);
external 'ExitProcess@kernel32.dll stdcall';
そして、それを使用する方法は次のとおりです。
[Code]
if .... then begin
ExitProcess(0);
end;
InnoSetup ヘルプの InitializeSetup と Abort を参照してください。コーディが言ったように、それは可能です。問題が発生した場合は、実行したことと発生している問題を投稿してください。
コード セクションのどこかでチェックを実行します。右?そのチェックの結果として、インストールを終了します。終了を実行するには、次の行を入力します。
PostMessage (WizardForm.Handle, $0010, 0, 0); { quit setup, $0010=WM_CLOSE }
うまくいけば、これが役に立ちます