Inno设置-一次安装即可安装多个软件版本

时间:2019-07-07 16:20:36

标签: installation inno-setup

我需要使用多个软件版本进行设置,并且希望它具有便携式/安装选项。

上面的屏幕截图是组件页面,我已对其进行了修改以查看其工作方式。它应该在信息页面之后显示,然后在选择选项后应该显示目录选择页面。我认为[Files],[Tasks]和[Components]部分找出了我主要要处理的代码部分。

例如,如果用户选择使用单选按钮安装专业版,则单击“下一步”后,应显示目录选择页面,然后在继续后应安装或提取(取决于便携式或安装选择)。安装程序应基于标记为pro的指定文件(在[文件]和[组件]部分中)安装/提取指定版本。

我已经尝试了很多代码变体,但是当前的变体版本低于下面,并且无法正常工作(忽略SelectedValueIndex数字,我尚未输入正确的值,但我想确保首先编译)。 我有无声开关的代码,我也必须链接到单选按钮,但我认为该部分可以工作。从字面上看,它只是试图使选择(单选按钮和复选框)起作用。同样,如果您为版本ID之一(如组框)选择安装,则便携式选项将变灰(不可选择),反之亦然。目前,我无法使单选按钮具有任何值,而它们什么也不做。

简单的解释: 可以说有2个免费和专业版的应用程序。 屏幕截图是组件页面,我对其进行了修改以使其看起来像这样,因此在安装之前会提示您,然后基本上选择是要安装还是提取便携式版本(如果选择了安装),如果选择了便携式,则将安装到程序文件中。提取到安装程序目录。安装的文件取决于用户选择免费还是专业。 (分别在[文件]和[组件]部分中设置。)

   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;

It wont compile like this

1 个答案:

答案 0 :(得分:0)

使用Check parameter[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;