Inno Setup - Проверьте, существует ли несколько папок

У меня есть пользовательская страница удаления, которая вызывается с этой строкой:

UninstallProgressForm.InnerNotebook.ActivePage := UninstallConfigsPage;

Теперь, это просто показывает страницу каждый раз, когда запускается деинсталлятор, но мне нужно, чтобы она отображалась только при наличии определенных папок (их 6). Я мог бы сделать if заявление с кучей orДа, но мне интересно, есть ли более аккуратный способ сделать это.

1 ответ

Решение

В общем, нет лучшего способа, чем звонить DirExists для каждой папки:

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

Хотя при обработке набора файлов / папок желательно хранить их список в каком-либо контейнере (например, TStringList или же array of string), чтобы разрешить их (повторную) массовую обработку. У вас уже есть это (Dirs: TStringList) из моего решения вашего другого вопроса.

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;
Другие вопросы по тегам