Inno Setup:仅当选择组件“X”时如何创建密码向导页面

cra*_*2sh 4 passwords pascal inno-setup password-protection

任何人都可以帮助我保护选择组或组件。

举些例子

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

这个工作脚本与此类似:P

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

mgh*_*hie 6

我不确定我完全理解你的问题,但这也许有帮助。以下是您只需添加到Components.iss[code]示例部分的几个功能,并且只有当用户输入正确的密码时才能安装其中一个组件(“help”)。

由于您稍后在安装过程中需要密码,而且并非总是需要密码,因此您不能使用标准设置密码页面。您将创建自己的页面并将其插入到组件选择页面之后:

[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;
Run Code Online (Sandbox Code Playgroud)

请注意,这使用翻译后的密码标题,您可能还需要使其他三个字符串也可翻译。

接下来,如果用户未选择安装组件,您将需要隐藏该页面:

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;
Run Code Online (Sandbox Code Playgroud)

最后需要检查密码,如果密码错误,则阻止用户进入下一页:

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;
Run Code Online (Sandbox Code Playgroud)