2

セットアップにいくつかのカスタム ページを追加しました。このカスタム ページの 1 つで、いくつかのチェックを行います。このチェックが失敗した場合は、終了ページに切り替えます。これどうやってするの?

次の理由により、 ShouldSkipPageイベント関数でこれを行うことはできません。

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  // this will NEVER happened - see documentation below
  if (PageID = wpInstalling) or (PageID = wpPreparing) or (PageID = wpWelcome) then
  begin
    // skip install - simply for example
    result := True;
    exit;
  end;

  resutl := false;
end;

Inno Setupのドキュメントから:

ウィザードはこのイベント関数を呼び出して、特定のページ (PageID で指定) を表示するかどうかを決定します。True を返すと、ページはスキップされます。False を返すと、ページが表示される場合があります。

注: このイベント関数は wpWelcome、wpPreparing、および wpInstalling ページに対しては呼び出されず、セットアップが既にスキップする必要があると判断したページ (たとえば、コンポーネントを含まないインストールの wpSelectComponents) に対しても呼び出されません。

4

2 に答える 2

2

申し訳ありませんが、ShouldSkipPage を使用できない理由がわかりませんでした。それを行う通常の方法、ShouldSkipPage にあります。

function ShouldSkipPage(curPageId : Integer) : Boolean;
begin
  {For a certain condition, skip to wpFinished}
  if (SomeCondition and (curPageId <> wpFinished)) then
    Result := True
  {Probably more checks}
  else
    Result := False
end;
于 2010-02-04T17:30:08.960 に答える
2

私が正しく理解している場合は、チェックを実行しています。失敗した場合は、wpWelcome、wpPreparing、および wpInstalling (およびおそらくその他のカスタム ページ) をスキップします。

これらのページが表示されたときに実行されるアクションもスキップしたい、具体的にはインストール手順を実行したくないと思います。

その場合は、実際のインストール手順を実行せずにインストールを続行するのではなく、インストールをキャンセルする必要があります。InitializeSetupたとえば、次のように実行できます。

Procedure InitializeSetup();
VAR
  Check: Integer;
BEGIN
  // perform you check here, set the variable according to it's result

  IF (Check <> 0) THEN
    // abort installation
    Return False;
  ELSE
    Return True;
END;

編集
コメントへの回答: 最も簡単な解決策は、完全なウィザード ページではなく、チェックの結果を示すメッセージ ボックスを表示することです。それがあなたの目的に十分でない場合は、次のアプローチをお勧めします。

  1. チェックインを実行しInitializeSetup、結果をグローバル変数に保存します。

  2. チェックの結果を表示する新しいウィザード ページ ( CheckResultwpWelcomeと呼びます) を作成します。これは の直後に表示されます。

  3. そのページのOnNextButtonClickjust callCancelButtonClickでは、このページが表示されたときにインストールが常に中止されます。

  4. 今こそ変更するときですShouldSkipPage;-) グローバル チェック変数がすべて問題がないことを示している場合は、CheckResultページをスキップして、インストールが自動的に中止されないようにします。

これは機能するはずですが、何とかできる場合は、KISS の原則に従い、メッセージ ボックスのアプローチを採用してください。

于 2010-02-06T10:56:24.773 に答える