仅在Inno设置中选择特定组件时显示自定义页面并将输入保存到文件中

时间:2018-10-05 17:41:41

标签: inno-setup pascalscript

我正在尝试为我的应用程序建立一个安装程序,该安装程序包含两部分:服务器和客户端。客户端部分需要具有用户输入的IP地址。我正在使用自定义页面提示输入IP地址。但是,只有在用户选择“客户端”组件时,我才需要显示自定义页面。

[Components]
Name: "Serveur"; Description: "Server installation"; Types: Serveur; Flags: exclusive; 
Name: "Client"; Description: "Client installation"; Types: Client; Flags: exclusive

[Types]
Name: "Serveur"; Description: "Server Installation"
Name: "Client"; Description: "Client Installation"
[Code]                                                                                                                                    
var
  Page: TInputQueryWizardPage;
  ip: String;

procedure InitializeWizard();
begin
  Page := CreateInputQueryPage(wpWelcome,
    'IP Adresse du serveur', 'par exemple : 192.168.1.120',
    'Veuillez introduire l''adresse IP du serveur :');

  Page.Add('IP :', False);

  Page.Values[0] := ExpandConstant('192.168.x.x');
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  if (CurPageID = Page.ID) then
  begin
    ip := Page.Values[0];
    SaveStringToFile('C:\Program Files\AppClient\ipAddress.txt', ip, False);
  end;

  Result := True;
end;

1 个答案:

答案 0 :(得分:2)

  1. 您的自定义页面必须仅在“选择组件”页面之后,因此您需要将wpSelectComponents传递给CreateInputQueryPage

    var
      Page: TInputQueryWizardPage;
    
    procedure InitializeWizard();
    begin
      Page :=
        CreateInputQueryPage(
          wpSelectComponents, 'IP Adresse du serveur', 'par exemple : 192.168.1.120',
          'Veuillez introduire l''adresse IP du serveur :');
      Page.Add('IP :', False);
      Page.Values[0] := '192.168.x.x';
    end;
    

    (还要注意,对不包含任何常量的字符串文字调用ExpandConstant毫无意义。)

  2. 当未选择“客户端”组件时,跳过自定义页面:

    function IsClient: Boolean;
    begin
      Result := IsComponentSelected('Client');
    end;
    
    function ShouldSkipPage(PageID: Integer): Boolean;
    begin
      Result := False;
      if PageID = Page.ID then
      begin
        Result := not IsClient;
      end;
    end;
    

    另请参阅Skipping custom pages based on optional components in Inno Setup

  3. 行为良好的安装程序不应在用户最终确认安装之前对系统进行任何修改。因此,仅在真正开始安装后才进行任何更改,而在用户单击自定义页面上的“下一步”时则无需进行任何更改。

    此外,您不能使用{app}常量对文件的路径进行硬编码。

    procedure CurStepChanged(CurStep: TSetupStep);
    var
      IP: string;
    begin
      if (CurStep = ssInstall) and IsClient() then
      begin
        IP := Page.Values[0];
        SaveStringToFile(ExpandConstant('{app}\ipAddress.txt'), IP, False);
      end;
    end;