Inno Setup - 检查是否存在多个文件夹

Inno Setup - Check if multiple folders exist

我有一个自定义卸载页面,它是通过以下行调用的:

UninstallProgressForm.InnerNotebook.ActivePage := UninstallConfigsPage;

现在,这只会在每次卸载程序 运行 时显示该页面,但我需要它仅在某些文件夹存在时显示(其中有 6 个)。我可以用一堆 or 做一个 if 声明,但我想知道是否有更简洁的方法来做到这一点。

一般来说,没有比为每个文件夹调用 DirExists 更好的方法了:

if DirExists('C:\path1') or
   DirExists('C:\path2') or
   DirExists('C:\path3') then
begin
  { ... }
end;

不过,在处理一组 files/folders 时,建议将它们的列表存储在某个容器中(例如 TStringList or array of string), to allow their (repeated) bulk-processing. You already have that (Dirs: TStringList) from .

var
  Dirs: TStringList;
begin
  Dirs := TStringList.Create();
  Dirs.Add('C:\path1');
  Dirs.Add('C:\path2');
  Dirs.Add('C:\path2');
end;
function AnyDirExists(Dirs: TStringList): Boolean;
var
  I: Integer;
begin
  for I := 0 to Dirs.Count - 1 do
  begin
    if DirExists(Dirs[I]) then
    begin
      Result := True;
      Exit;
    end;
  end;

  Result := False;
end;

但我从 得知,您将所有路径映射到复选框。因此,您需要做的就是检查是否有任何复选框:

if CheckListBox.Items.Count > 0 then
begin
  UninstallProgressForm.InnerNotebook.ActivePage := UninstallConfigssPage;

  { ... }

  if UninstallProgressForm.ShowModal = mrCancel then Abort;

  { ... }

  UninstallProgressForm.InnerNotebook.ActivePage := UninstallProgressForm.InstallingPage;
end;