切换到Inno Setup安装中的完成页面

时间:2010-02-04 17:11:52

标签: installer installation windows-installer inno-setup

我在设置中添加了一些自定义页面。在其中一个自定义页面中,我做了一些检查。如果此检查失败,我希望切换到完成页面。 我该怎么做?

我无法使用 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设置文档:

  

向导调用此事件函数   确定是否一个   特定页面(由PageID指定)   应该显示出来。如果你回来了   没错,页面将被跳过;如果你   返回False,页面可能会显示。

     

注意:此事件函数未被称为    对于 wpWelcome,wpPreparing和   wpInstalling页面,也不是页面   安装程序已经确定应该是   跳过(例如,   wpSelectComponents在安装中   不含任何成分)。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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. 在该页面的OnNextButtonClick中只需拨打CancelButtonClick,这样就可以在显示此页面时中止安装

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