Inno Setup查找文件夹并使用多种选择的目录

时间:2018-06-28 12:56:56

标签: inno-setup

我要解决的一个大问题是,如果您有一个目录..\App,其中有两个文件夹,但是您不知道文件夹名称:

C:\Program Files (x86)\App\EFRTJKD
C:\Program Files (x86)\App\UDSIDJF

Inno脚本如何帮助识别EFRTJKDUDSIDJF并将其显示为安装页面中的选项?而不是“浏览目录”选项?

这两个文件夹都有一个名为Program.exeVersion.txt的文件。 Version.txt包含文件夹的描述。我想在文件夹选择中显示说明。

非常感谢。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

使用FindFirst / FindNext查找您的文件夹。

然后您可以将其放入TNewCheckListBox中。隐藏DirEdit。并根据用户在TNewCheckListBox

中选择的内容更新其隐藏内容
[Code]

var
  DirCheckListBox: TNewCheckListBox;
  Dirs: TStringList;

procedure DirCheckListBoxClick(Sender: TObject);
begin
  { When user changes selection, update the path in hidden edit box }
  WizardForm.DirEdit.Text := Dirs[DirCheckListBox.ItemIndex];
end;

procedure InitializeWizard();
var
  FindRec: TFindRec;
  RootPath: string;
  Path: string;
  Name: AnsiString;
begin
  DirCheckListBox := TNewCheckListBox.Create(WizardForm);
  DirCheckListBox.Parent := WizardForm.DirEdit.Parent;
  DirCheckListBox.Top := WizardForm.SelectDirBrowseLabel.Top;
  DirCheckListBox.Left := WizardForm.DirEdit.Left;
  DirCheckListBox.Width := WizardForm.DirEdit.Width;
  DirCheckListBox.Height :=
    WizardForm.DiskSpaceLabel.Top - DirCheckListBox.Top - ScaleY(8);
  DirCheckListBox.Color := WizardForm.TasksList.Color;
  DirCheckListBox.WantTabs := WizardForm.TasksList.WantTabs;
  DirCheckListBox.MinItemHeight := WizardForm.TasksList.MinItemHeight;
  DirCheckListBox.ParentColor := WizardForm.TasksList.ParentColor;
  DirCheckListBox.BorderStyle := WizardForm.TasksList.BorderStyle;

  WizardForm.DirEdit.Visible := False;
  WizardForm.DirBrowseButton.Visible := False;
  WizardForm.SelectDirBrowseLabel.Visible := False;

  RootPath := ExpandConstant('{pf}\App');

  Dirs := TStringList.Create;

  if FindFirst(RootPath + '\*', FindRec) then
  begin
    repeat
      if ((FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY) <> 0) and
         (FindRec.Name <> '.') and
         (FindRec.Name <> '..') then
      begin
        Path := RootPath + '\' + FindRec.Name;
        { LoadStringFromFile can handle only ascii/ansi files, no Unicode }
        if LoadStringFromFile(Path + '\' + 'version.txt', Name) then
        begin
          Dirs.Add(Path);
          DirCheckListBox.AddRadioButton(Name, '', 0, False, True, nil);
          { If already installed, check the path that was selected previously, }
          { otherwise check the first one }
          if (DirCheckListBox.Items.Count = 1) or
             (CompareText(WizardForm.DirEdit.Text, Path) = 0) then
          begin
            DirCheckListBox.ItemIndex := DirCheckListBox.Items.Count - 1;
            DirCheckListBox.Checked[DirCheckListBox.ItemIndex] := True;
          end;
        end;
      end;
    until not FindNext(FindRec);
  end;

  if DirCheckListBox.Items.Count = 0 then
  begin
    RaiseException('No folder found.');
  end;

  DirCheckListBox.OnClickCheck := @DirCheckListBoxClick;
  DirCheckListBoxClick(nil);
end;

enter image description here