Installation 如何在Inno安装程序的InputDirPage中显示/使用用户选择的应用程序路径{app}?

Installation 如何在Inno安装程序的InputDirPage中显示/使用用户选择的应用程序路径{app}?,installation,inno-setup,pascal,Installation,Inno Setup,Pascal,我正在使用Inno安装程序创建安装程序。我必须从用户获取两条路径。一个用于程序可执行文件,另一个用于libs。默认的应用程序文件夹是{pf}/companyname/applicationname 在InitializeWizard中,我创建了第二个页面,它从用户那里获取lib文件夹 有没有办法将默认的lib文件夹更改为用户选择的文件夹{app} 我已经试过了。它只给出默认的{app}值,而不是用户在第一页中选择的路径 [code] procedure InitializeWizard();

我正在使用Inno安装程序创建安装程序。我必须从用户获取两条路径。一个用于程序可执行文件,另一个用于libs。默认的应用程序文件夹是{pf}/companyname/applicationname

在InitializeWizard中,我创建了第二个页面,它从用户那里获取lib文件夹

有没有办法将默认的lib文件夹更改为用户选择的文件夹{app}

我已经试过了。它只给出默认的{app}值,而不是用户在第一页中选择的路径

[code]  
procedure InitializeWizard();  
begin  
  page2:= CreateInputDirPage(wpProgress,
    'Select Library Location', 'Where Library files should be stored?',
    'To continue, click Next. If you would like to select a different folder, click Browse.',
    False, 'Libs');    
  page2.Add('');  
  page2.Values[0] := WizardDirValue+'\libs';  
  LibDir := page2.Values[0];  
end
正如InitializeWizard的名称所示,它是一个初始化函数,在显示向导之前只调用一次。您可以通过在代码上设置一个断点来测试这一点——它只会在开始时被命中一次

因此,它是添加新向导页面和设置任何控件的默认值的正确位置,但不可能对其他向导页面的更改做出反应。您需要做的是在页面显示之前更新库路径。正确的方法是使用NextButtonClick函数。以下是一些示例代码:

var
  LibPage: TInputDirWizardPage;

procedure InitializeWizard();
begin
  LibPage := CreateInputDirPage(wpSelectDir, 'Select Library Location',
    'Where should the library files be stored?',
    'To continue, click Next. If you would like to select a different folder, ' +
    'click Browse.', False, 'Libs');
  LibPage.Add('');
  LibPage.Values[0] := WizardDirValue + '\libs';
end;
这将在查询{app}目录的页面之后添加您的页面。由于用户可以单击Prev按钮多次更改{app}目录,因此在页面即将显示时,应始终更新库路径:

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  if CurPageID = wpSelectDir then
    LibPage.Values[0] := WizardDirValue + '\libs';
end;

为了获得更好的可用性,您还可以检查库目录是否为默认值,否则不要更改其值。

您可以使用ExpandConstant函数。其中,所有Inno设置常量都将替换为其实际值。例如,ExpandConstant“{app}\mydir”应该变成C:\Program Files\\mydir.

Ramnish-请只发布至少有机会编译的代码。您在5行代码中为向导页使用了3个不同的名称。您可以对此进行检查并