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

时间:2011-01-09 08:22:41

标签: installer inno-setup pascal

我正在使用Inno Setup创建一个安装程序。我必须从用户那里采取两条路径。一个用于程序可执行文件,另一个用于库。默认的应用程序文件夹是{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

2 个答案:

答案 0 :(得分: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;

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

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

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

答案 1 :(得分:0)

您可以使用ExpandConstant函数。在其中,所有Inno Setup常量都被替换为它们的实际值。例如,ExpandConstant('{app} \ mydir')应该变为C:\ Program Files \\ mydir。