Отображать пользовательскую страницу и сохранять входные данные в файл, только если в настройке Inno выбран определенный компонент - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь создать настройку для своего приложения, которая состоит из двух частей: сервера и клиента.Клиентская часть должна иметь 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 голосов
/ 08 октября 2018
  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;
    

    См. также Пропуск пользовательских страниц на основе дополнительных компонентов в 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;
    
...