我正在尝试为我的应用程序建立一个安装程序,该安装程序包含两部分:服务器和客户端。客户端部分需要具有用户输入的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;
答案 0 :(得分:2)
您的自定义页面必须仅在“选择组件”页面之后,因此您需要将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
毫无意义。)
当未选择“客户端”组件时,跳过自定义页面:
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。
行为良好的安装程序不应在用户最终确认安装之前对系统进行任何修改。因此,仅在真正开始安装后才进行任何更改,而在用户单击自定义页面上的“下一步”时则无需进行任何更改。
此外,您不能使用{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;