在Inno设置创建页面中,用户可以从设置文件中包装的文件夹中选择文件

问题描述 投票:0回答:1
在Inno设置中,我想创建一个页面,该页面具有与我在

[Files]

部分中列出的文件夹中相对应的复选框列表。
如何在此文件夹中读取文件,然后仅复制用户选择的这些文件?现在,我什至不明白列表,因为文件夹不存在。

{tmp}\list

	

[Files]
Source: "list\*"; DestDir:"{tmp}"; Flags: recursesubdirs

[Code]

var
  karten : TNewCheckListBox;
  FileListBox : TNewListBox;
  KartenFormular: TWizardPage;

procedure KartenEinlesen(const Directory: string; Files: TStrings);
var
  FindRec: TFindRec;
begin
  Files.Clear;
  if FindFirst(ExpandConstant(Directory + '*'), FindRec) then
  try
    repeat
      if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 1 then
        Files.Add(FindRec.Name);
    until
      not FindNext(FindRec);
  finally
    FindClose(FindRec);
  end;  
end;

procedure InitializeWizard;
var 
  AfterID: Integer;
begin
  AfterID := wpSelectTasks;
  KartenFormular := 
    CreateCustomPage(
      AfterID, 'Kartendaten', 'Ort für den Ordner Kartendaten auswählen');
  FileListBox := TNewListBox.Create(WizardForm);
  FileListBox.Parent := KartenFormular.Surface;
  FileListBox.Align := alClient;
  AfterID := KartenFormular.ID;
    
  KartenEinlesen('{tmp}\maptiles\*',FileListBox.Items)
end;
在提取文件之前很早就发生。此外,将(所有)文件提取到
inno-setup pascalscript
1个回答
2
投票
,然后在用户选择要安装的文件后将其复制到其他地方是低效的。您将必须编码实际的安装过程。

正确的解决方案是使用
Inno设置Preprocersor
.

以下问题显示了类似的问题。它为每个文件创建一个
INNO设置组件。它甚至可能比自定义页面更好。 dynymanny用文件夹中的所有文件及其子文件夹中的所有文件添加一个Inno设置组件

但是,如果您想要自定义页面,则该解决方案不会太大。您只会生成每个文件,而不是

{tmp}

节条目。该代码在递归起作用时有些复杂(您似乎不需要)。对于平坦的解决方案,可以简化。
还请注意,有什么使使用Check List框创建自定义页面变得更容易的原因。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.