Inno 设置 - 一次安装中有多个软件版本



我需要使用多个版本的软件进行设置,我想让它具有可移植/安装的选项。

我有一个自定义的组件页面。它应该显示在信息页面之后,然后在选择选项后显示目录选择页面。我想我已经弄清楚了[Files][Tasks]以及[Components]部分。这主要是我正在努力的代码部分。

例如,如果用户选择使用单选按钮安装Pro版本,则单击"下一步"后,它应显示目录选择页面,然后继续后应安装或解压缩(取决于便携式或安装选择)。安装程序应根据标记为Pro的指定文件(在[Files][Components]部分中)安装/提取指定版本。

我已经尝试了很多代码变体,但我当前的变体在下面并且不起作用(忽略SelectedValueIndex数字,我还没有输入正确的值,但我想确保它会先编译)。 我有静音开关的代码,我也必须链接到单选按钮,但我认为这部分会起作用。从字面上看,它只是试图让选择(单选按钮和复选框)工作。此外,如果为其中一个版本 id 选择安装,例如便携式选项的组框将灰显(不可选择),反之亦然。目前,我无法让单选按钮具有任何值,它们什么都不做。

更简单的解释: 假设应用程序有两个版本免费专业版。 安装的文件取决于用户是选择"免费"还是"专业"。(分别在[文件]和[组件]部分中设置)。

procedure InitializeWizard();
var  SystemMenu: HMENU;
begin
{Create Mode Selection Page}
UsagePage := CreateInputOptionPage(wpInfoBefore,
'Mode', 'Select Installation Mode',
'Mode',
True, False);
UsagePage.Add('FreeInstall');
UsagePage.Add('BusinessInstall');
UsagePage.Add('TechnicianInstall');
UsagePage.Add('ProfessionalInstall');
UsagePage.Add('FreePortable');
UsagePage.Add('BusinessPortable');
UsagePage.Add('TechnicianPortable');
UsagePage.Add('ProfessionalPortable');
//
{Set Default Checkbox - Normal Install}
if (FreeInstall)
then
UsagePage.SelectedValueIndex := 1
else
UsagePage.SelectedValueIndex := 0;
if (BusinessInstall)
then
// Set the Respective Checkbox on The Wizard.
UsagePage.SelectedValueIndex := 1
else
UsagePage.SelectedValueIndex := 0;
if (TechnicianInstall)
then
// Set the Respective Checkbox on The Wizard.
UsagePage.SelectedValueIndex := 1
else
UsagePage.SelectedValueIndex := 0;
if (ProfessionalInstall)
then
// Set the Respective Checkbox on The Wizard.
UsagePage.SelectedValueIndex := 1
else
UsagePage.SelectedValueIndex := 0;

{Set Default Checkbox - Portable}
if (FreePortable)
then
UsagePage.SelectedValueIndex := 1
else
UsagePage.SelectedValueIndex := 0;
if (BusinessPortable)
then
// Set the Respective Checkbox on The Wizard.
UsagePage.SelectedValueIndex := 1
else
UsagePage.SelectedValueIndex := 0;
if (TechnicianPortable)
then
// Set the Respective Checkbox on The Wizard.
UsagePage.SelectedValueIndex := 1
else
UsagePage.SelectedValueIndex := 0;
if (ProfessionalPortable)
then
// Set the Respective Checkbox on The Wizard.
UsagePage.SelectedValueIndex := 1
else
UsagePage.SelectedValueIndex := 0;
WizardForm.Caption := '{#MyAppName} v{#MyAppVersion}';
TotalSpace;
WizardForm.DiskSpaceLabel.Hide;

它不会像这样编译

使用Check参数将[Files]节条目绑定到自定义页面上的选择:

[Files]
Source: "MyProgFree.exe"; DestDir: "{app}"; Check: IsModeSelected(0)
Source: "MyProgPro.exe"; DestDir: "{app}"; Check: IsModeSelected(1)
[Code]
var
UsagePage: TInputOptionWizardPage;
function IsModeSelected(Mode: Integer): Boolean;
begin
Result := (UsagePage.SelectedValueIndex = Mode);
end;
procedure InitializeWizard();
begin
UsagePage :=
CreateInputOptionPage(
wpInfoBefore, 'Mode', 'Select Installation Mode', 'Mode', True, False);
UsagePage.Add('FreeInstall');
UsagePage.Add('ProInstall');
end;

最新更新