我需要创建两个目的地的自定义页面。
我已经完成了:
#define MyAppName "TESTPROG"
[Setup]
AppName={#MyAppName}
DefaultDirName=C:\test\{#MyAppName}
DefaultGroupName={#MyAppName}
[Code]
var
Page: TInputDirWizardPage;
DataDir: String;
procedure InitializeWizard;
begin
Page := CreateInputDirPage(wpWelcome,
'Select Personal Data Location', 'Where should personal data files be stored?',
'Personal data files will be stored in the following folder.'#13#10#13#10 +
'To continue, click Next. ' +
'If you would like to select a different folder, click Browse.',
False, 'New Folder');
Page.Add('Local APP');
Page.Add('Local Storage');
Page.Values[0] := ('C:\My Program');
Page.Values[1] := ('D:\My Program');
DataDir := Page.Values[0];
end;
我需要知道如何以及在哪里使用
Page.Values[0]
和 Page.Values[1]
设置 DefaultDirName
我需要它,因为我的文件的某些部分将位于一个文件夹中,而其他部分将位于其他文件夹中。
例如:
[Files]
Source: C:\TEST\DLL1.bat; DestDir: Page.Values[0]\sys1;
Source: C:\TEST\DLL2.bat; DestDir: Page.Values[1]\sys2;
使用脚本常量:
[Files]
Source: C:\TEST\DLL1.bat; DestDir: "{code:GetDir|0}\sys1"
Source: C:\TEST\DLL2.bat; DestDir: "{code:GetDir|1}\sys2"
[Code]
var
Page: TInputDirWizardPage;
function GetDir(Param: string): string;
begin
Result := Page.Values[StrToInt(Param)];
end;
procedure InitializeWizard;
begin
Page := CreateInputDirPage(...);
...
end;
如果您想使用
TInputDirWizardPage
中的(第一个)路径之一而不是 “选择目标位置” 页面中的路径,您有三个选项。
使用 DisableDirPage
指令
禁用“选择目标位置”页面:
DisableDirPage=yes
将路径从
TInputDirWizardPage
复制到隐藏的”选择
目的地位置”页面,当用户按下下一步按钮时:
var
Page: TInputDirWizardPage;
function InputDirPageNextButtonClick(Sender: TWizardPage): Boolean;
begin
// Use the first path as the "destination path"
WizardForm.DirEdit.Text := Page.Values[0];
Result := True;
end;
procedure InitializeWizard();
begin
Page := CreateInputDirPage(...);
...
Page.OnNextButtonClick := @InputDirPageNextButtonClick;
end;
为了补充这一点,您还可以考虑将首字母
WizardForm.DirEdit
复制到您的自定义框中。这样您就可以确保 1) 在重新安装/升级时,重复使用之前选择的值; 2) /DIR
命令行开关有效。为此,请参阅如何使 Inno Setup /DIR 命令行开关与自定义路径页面一起使用。
{app}
常量 替换为 {code:GetDir|0}
。
使 Inno Setup 不使用
{app}
指令创建 CreateAppDir
路径:
CreateAppDir=no
(这意味着
DisableDirPage=yes
)。
UninstallFilesDir
指令将卸载文件存储在第一个路径中:
UninstallFilesDir={code:GetDir|0}
与 1) 相反,使用此方法,先前的安装路径将不会在以后的升级/重新安装中重复使用。要实现这一点,请参阅Inno Setup 提示用户输入文件夹并存储值。
不要使用
CreateInputDirPage
,而是在“选择目的地位置”页面(SelectDirPage
)添加第二个路径输入框。