2

我在我的设置中添加了一些自定义页面。在其中一个自定义页面中,我进行了一些检查。如果此检查失败,我想切换到完成页面。我怎样才能做到这一点?

我不能使用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. 创建一个新的向导页面(我们称之为CheckResult)来显示您的检查结果,它应该直接显示在wpWelcome.

  3. 在那个页面的OnNextButtonClickjust callCancelButtonClick中,这样在显示这个页面时安装总是中止

  4. 现在是修改的时候了ShouldSkipPage;-) 如果全局检查变量表明一切正常,请跳过您的CheckResult页面,这样安装不会自动中止

应该可行,但如果可以的话,请遵循 KISS 原则并使用消息框方法。

于 2010-02-06T10:56:24.773 回答