使用文件部分自定义页面中的两个/多个选定目录

问题描述 投票:0回答:1

我需要创建两个目的地的自定义页面。

我已经完成了:

#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;
inno-setup pascalscript
1个回答
5
投票

使用脚本常量

[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
中的(第一个)路径之一而不是 “选择目标位置” 页面中的路径,您有三个选项。

  1. 使用 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 命令行开关与自定义路径页面一起使用

  2. {app}
    常量 替换为
    {code:GetDir|0}

    使 Inno Setup 不使用

    {app} 指令创建 
    CreateAppDir
    路径
    :

    CreateAppDir=no
    

    (这意味着

    DisableDirPage=yes
    )。

    并使用

    UninstallFilesDir
    指令将卸载文件存储在第一个路径中:

    UninstallFilesDir={code:GetDir|0}
    

    与 1) 相反,使用此方法,先前的安装路径将不会在以后的升级/重新安装中重复使用。要实现这一点,请参阅Inno Setup 提示用户输入文件夹并存储值

  3. 不要使用

    CreateInputDirPage
    ,而是在“选择目的地位置”页面(
    SelectDirPage
    )添加第二个路径输入框。

© www.soinside.com 2019 - 2024. All rights reserved.