Inno Setup: Как создать страницу мастера паролей, только если выбран компонент «X» - PullRequest
3 голосов
/ 14 августа 2010

Может ли кто-нибудь помочь мне защитить группу выбора или компонент.

Например

If ('Readme.txt').selected or ('compact').selected = True then
begin "Password wizard page";
else
result := true;
end;

Что-то вроде этого рабочего скрипта: P

function CheckPassword(Password: String): Boolean;
begin
 result := false;
 if (Password='component') or (Password='type') then
   result := true;
end;

1 Ответ

4 голосов
/ 16 сентября 2010

Я не уверен, что полностью понял ваш вопрос, но, возможно, это поможет. Вот несколько функций, которые нужно добавить только в раздел [code] образца Components.iss , и один из компонентов («помощь») может быть установлен только тогда, когда пользователь вводит правильный пароль. .

Поскольку пароль требуется позже при установке, и не всегда, вы не можете использовать стандартную страницу пароля для установки. Вместо этого вы создадите свою собственную страницу и вставите ее после страницы выбора компонентов:

[Code]
var
  PasswordPage: TInputQueryWizardPage;

procedure InitializeWizard();
begin
  PasswordPage := CreateInputQueryPage(wpSelectComponents, 
    'Your caption goes here',
    'Your description goes here',
    'Your subcaption goes here');
  PasswordPage.Add(SetupMessage(msgPasswordEditLabel), True);
end;

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

Далее вам нужно будет скрыть эту страницу, если пользователь не выбрал компонент для установки:

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result := False;
  if PageID = PasswordPage.ID then begin
    // show password page only if help file is selected for installation
    Result := not IsComponentSelected('help');
  end;
end;

Наконец, вам нужно проверить пароль и запретить пользователю переходить на следующую страницу, если пароль неверный:

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  if CurPageID = PasswordPage.ID then begin
    // stay on this page if password is wrong
    if PasswordPage.Edits[0].Text <> 'my-secret-password' then begin
      MsgBox(SetupMessage(msgIncorrectPassword), mbError, MB_OK);
      Result := False;
    end;
  end;
end;
...