我正在使用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
答案 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。