Перейдите на конечную страницу при установке Inno Setup - PullRequest
2 голосов
/ 04 февраля 2010

Я добавил несколько пользовательских страниц в мои настройки. На одной из этих пользовательских страниц я делаю некоторые проверки. Если эта проверка не удалась, я хочу перейти на страницу завершения. Как я могу это сделать?

Я не могу сделать это с 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) должно быть показано на всех. Если вы вернетесь Правда, страница будет пропущена; если ты return False, страница может быть показана.

Примечание: эта функция события не вызывается для wpWelcome, wpPreparing и wpУстановка страниц, ни для страниц, которые Настройка уже определена должна быть пропущено (например, wpSelectComponents в установке не содержит компонентов).

Ответы [ 2 ]

2 голосов
/ 06 февраля 2010

Если я вас правильно понимаю, вы выполняете проверку, и если она не проходит, вы хотите пропустить wpWelcome, wpPreparing и wpInstall (и, возможно, другие пользовательские страницы).

Я предполагаю, что вы также хотите пропустить действия, выполняемые при отображении этих страниц, в частности, вы не хотите выполнять шаг установки.

Если это так, вы должны отменить установку, а не продолжать ее без выполнения фактических шагов установки. Вы можете сделать это в 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. Создайте новую страницу мастера (давайте назовем ее CheckResult ) для отображения результатов вашей проверки, она должна отображаться сразу после wpWelcome.

  3. На этой странице OnNextButtonClick просто позвоните CancelButtonClick, таким образом, установка всегда прерывается при отображении этой страницы

  4. Настало время изменить ShouldSkipPage ;-) Если переменная глобальной проверки показывает, что все в порядке, пропустите страницу CheckResult , чтобы установка не прерывалась автоматически

Это должно работать, но если вы как-то можете, следуйте принципу KISS и используйте подход с окном сообщений.

2 голосов
/ 04 февраля 2010

Извините, я не понял, почему вы не можете использовать 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;
...