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

Ram*_*ish 2 installer pascal inno-setup

我正在使用Inno Setup创建一个安装程序.我必须从用户那里采取两条路径.一个用于程序可执行文件,另一个用于库.默认的app文件夹是{pf}/companyname/applicationname

InitializeWizard我创建了第二页,它从用户获取lib文件夹.

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

我试过了WizardDirValue.它只提供默认{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
Run Code Online (Sandbox Code Playgroud)

mgh*_*hie 5

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

这将在查询{app}目录的页面之后添加您的页面.由于用户可以单击"上一步"按钮{app}多次更改目录,因此在页面即将显示时应始终更新库路径:

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

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