开发者

Inno Setup: How to create password wizard page only if component "X" selected

Can anyone help me to protect a selection group or component.

For examples

If ('Read开发者_StackOverflow中文版me.txt').selected or ('compact').selected = True then
begin "Password wizard page";
else
result := true;
end;

Something like that to this working script :P

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


I'm not sure I completely understood your question, but maybe this helps. Here are a few functions you only need to add to the [code] section of the Components.iss sample, and one of the components ("help") can only be installed when the user enters the correct password.

Since you need the password later in the installation, and not always, you can not use the standard setup password page. You will instead create your own page and insert it after the components selection page:

[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;

Note that this uses the translated password caption, you may need to make the other three strings translatable as well.

Next you will need to hide that page if the user has not selected the component for installation:

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;

Finally you need to check the password, and prevent the user from going to the next page if the password is wrong:

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;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜