控制自定义页面以在特定任务后显示

时间:2012-03-07 19:26:16

标签: inno-setup task custom-pages

经过几个小时的谷歌搜索和挣扎,并没有在哪里,我决定在这里寻求帮助。

我想要完成的任务,我正在尝试从用户那里获取IP并将其用作我的[Run]部分中的命令行参数。

所以我有这个:

[Task]
Name: "License"; Description: "Usb Key License Driver"; GroupDescription: "UsbLicense"; Flags: checkedonce
Name: "License/Desktop"; Description: "Desktop License"; GroupDescription: "UsbLicense"; Flags: exclusive
Name: "License/NetworkClient"; Description: "Network Client License Key"; GroupDescription: "UsbLicense"; Flags: exclusive unchecked

现在,如果用户选择了网络客户端,我希望能够显示自定义页面,并获取IP并像这样使用它:

[Run]
Filename: "{app}\Drivers\Program.exe"; Parameters: "/ip:{code:GetIPhere}"; StatusMsg: "Installing drivers..."; Tasks: License/NetworkClient

我设法创建了自己的页面并运行了这个:

[Code]
procedure InitializeWizard();
begin
  CustomForm_CreatePage(wpSelectDir);
end;

现在我的主要问题是:

1)如何控制自定义表单显示,它在我的任务页面之前激活之前显示。

2)如果我可以让它显示在AFTER任务页面之后?如何编写代码以使其显示在"客户端网络"条件只来自任务。 (如果我在NextButtonClick方法中执行此操作,我如何知道自定义页面的页面ID是什么?)

感谢您的帮助,我只是如此接近完成我的安装程序,但这让我疯了。

---- ---- EDITED

我解决了我的问题1,在创建自定义页面时有一个pageAfter参数,我们可以使用selectedTask常量来确定它在任务页面后显示:

procedure InitializeWizard();
begin
  Form_CreatePage(wpSelectTasks);
end;

谢谢和问候, Kev84

1 个答案:

答案 0 :(得分:2)

您可以使用Pascal脚本WizardSelectedTasks,它将返回您创建的任务字符串,只需对返回的字符串执行“Pos”,您就可以确定是否选择了您的特定任务。

[code]
function Form_ShouldSkipPage(Page: TWizardPage): Boolean;
var
 selectedTask : string;
 skipPage : bool;
begin
  skipPage := true;
  selectedTask := WizardSelectedTasks(false);

  if (Pos('client', selectedTask) > 0) then
  begin    
    skipPage := false;
  end;
  Result := skipPage;

end;