我在设置中添加了一些自定义页面。在其中一个自定义页面中,我做了一些检查。如果此检查失败,我希望切换到完成页面。 我该怎么做?
我无法使用 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在安装中 不含任何成分)。
答案 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;
修改强>
回答您的评论:最简单的解决方案是显示一个带有检查结果的消息框,而不是一个完整的向导页面。如果这不足以满足您的目的,我建议采用以下方法:
执行InitializeSetup
中的检查并将结果存储在全局变量中。
创建一个新的向导页面(让我们称之为 CheckResult )以显示您的检查结果,它应该在wpWelcome
之后直接显示。
在该页面的OnNextButtonClick
中只需拨打CancelButtonClick
,这样就可以在显示此页面时中止安装
现在是时候修改ShouldSkipPage
;-)如果全局检查变量表明一切正常,请跳过 CheckResult 页面,以免安装中止自动