Управление пользовательской страницей для отображения после определенных задач - PullRequest
3 голосов
/ 07 марта 2012

После нескольких часов, гуглящих и борющихся, и не найденных, я решаю обратиться за помощью сюда.

То, что я пытаюсь выполнить, я пытаюсь получить 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

Теперь, если пользователь выбирает Network client, я хочу иметь возможность показать пользовательскую страницу, получить 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) Если я смогу показать это ПОСЛЕ страницы задач? Как мне написать код, чтобы он отображался в условии «Клиентская сеть» только из задачи. (Если я делаю это в методе NextButtonClick, как мне узнать, какой идентификатор страницы у моей пользовательской страницы?)

Спасибо за вашу помощь, я так близко подошел к завершению установки, но это сводит меня с ума.

---- EDITED ----

Я решил свою проблему 1, при создании пользовательской страницы есть параметр pageAfter, и мы можем использовать константу selectedTask, чтобы определить, будет ли она появляться ПОСЛЕ страницы задач:

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

Спасибо и С уважением, Kev84

1 Ответ

2 голосов
/ 08 марта 2012

Вы можете использовать Pascal Script 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;
...