13

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

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

4

6 に答える 6

16

インストーラーが実行されないようにするには、前提条件のテストが失敗したときにFalseInitializeSetup. これにより、ウィザードが表示される前でもインストーラーが終了します。

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;

ここに画像の説明を入力


それ以外のときにインストーラーを強制終了する必要がある場合は、ExitProcessWinAPI 呼び出しを使用します。

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 をロードしている場合は、クラッシュを避けるために、最初にアンロードする必要がある場合があります。これも、一時ディレクトリをクリーンアップしません。

ここに画像の説明を入力


于 2016-09-30T10:08:23.003 に答える
14

次のイベントにいる場合は、Abort()を使用できます。

InitializeSetup
InitializeWizard
CurStepChanged(ssInstall)
InitializeUninstall
CurUninstallStepChanged(usAppMutexCheck)
CurUninstallStepChanged(usUninstall)
于 2011-08-11T08:17:25.700 に答える
10

私がそれを行う方法は次のとおりです。

procedure ExitProcess(exitCode:integer);
  external 'ExitProcess@kernel32.dll stdcall';

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

[Code]
  if .... then begin
     ExitProcess(0);
  end;
于 2011-08-11T07:32:22.913 に答える
4

InnoSetup ヘルプの InitializeSetup と Abort を参照してください。コーディが言ったように、それは可能です。問題が発生した場合は、実行したことと発生している問題を投稿してください。

于 2010-12-14T12:21:28.480 に答える
1

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

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

うまくいけば、これが役に立ちます

于 2011-01-21T22:50:27.017 に答える