Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Почему не отображается прогресс-бар при удалении папки в Inno Setup?

Delphi , Программа и Интерфейс , Инсталяция

При создании установщика с помощью Inno Setup для удаления папки во время деинсталляции приложения пользователем вы хотите отображать прогресс-бар. Однако при использовании события CurUninstallStepChanged для удаления папки и отображения прогресс-бара с стилем npbstMarquee, прогресс-бар не отображается при запуске файла unins000.exe. В этой статье мы рассмотрим, почему это происходит и как это исправить.

Описание проблемы

При использовании события CurUninstallStepChanged для удаления папки и отображения прогресс-бара с стилем npbstMarquee, прогресс-бар не отображается при запуске файла unins000.exe. Это происходит потому, что при деинсталляции приложения пользователем, Inno Setup запускает процесс удаления в фоновом режиме, и поэтому прогресс-бар не обновляется визуально.

Подтвержденный ответ

Чтобы отобразить и анимировать прогресс-бар, необходимо обработать сообщения в очереди. Это можно сделать с помощью функции AppProcessMessage из ответа на вопрос "Inno Setup: How to modify long running script so it will not freeze GUI?" на StackOverflow.

При использовании функции DelTree интервал между вызовами AppProcessMessage будет слишком большим, чтобы анимировать прогресс-бар плавно. В этом случае вам придется реализовать удаление папки рекурсивно, чтобы часто обрабатывать сообщения в очереди.

Ниже приведен пример кода, который демонстрирует, как удалить папку и отобразить прогресс-бар с помощью стиля npbstMarquee во время деинсталляции приложения пользователем:

procedure DeleteFolder();
var
  FindRec: TFindRec;
  fullPath: string;
  tmpMsg: string;
  StatusText: string;
  deletePath: string;
begin
  { find all and delete }
  UninstallProgressForm.ProgressBar.Style := npbstMarquee;
  StatusText := UninstallProgressForm.StatusLabel.Caption;
  UninstallProgressForm.StatusLabel.WordWrap := True;
  UninstallProgressForm.StatusLabel.AutoSize := True;
  fullPath := 'C:\ProgramData\TestPath';
  if FindFirst(ExpandConstant(fullPath + '\*'), FindRec) then
    try
      repeat
        if (FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY <> 0) and
           (FindRec.Name <> '.') and (FindRec.Name <> '..') then begin
            deletePath := AddBackslash(fullPath) + FindRec.Name;
            tmpMsg := 'Deleting...' + #13#10 + deletePath;
            UninstallProgressForm.StatusLabel.Caption := tmpMsg;
            AppProcessMessage(msg); // Добавляем вызов функции AppProcessMessage
            DelTree(deletePath, True, True, True);
        end;
      until
        not FindNext(FindRec);
    finally
      UninstallProgressForm.StatusLabel.Caption := StatusText;
      FindClose(FindRec);
    end;
  UninstallProgressForm.ProgressBar.Style := npbstNormal;
end;

{ Uninstall event }
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  case CurUninstallStep of
    usUninstall:
    begin
      DeleteFolder();
    end;
  end;
end;

В этом примере мы добавляем вызов функции AppProcessMessage перед вызовом функции DelTree в цикле, чтобы часто обрабатывать сообщения в очереди и анимировать прогресс-бар плавно.

Альтернативный ответ

Если вам не нужно удалять папку во время деинсталляции приложения пользователем, вы можете использовать секцию [UninstallDelete] в скрипте Inno Setup, чтобы удалить папку автоматически. В этом случае прогресс-бар будет отображаться автоматически, и вам не придется писать дополнительный код для отображения прогресс-бара.

Надеюсь, этот ответ поможет вам решить проблему с отображением прогресс-бара при удалении папки в Inno Setup.

Создано по материалам из источника по ссылке.

Краткое описание: При деинсталляции приложения пользователем с помощью Inno Setup не отображается прогресс-бар при удалении папки, если используется событие `CurUninstallStepChanged` и стиль прогресс-бара `npbstMarquee`, из-за того, что удаление происходи


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Инсталяция ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:32:29/0.0055727958679199/1