Вопрос:

Inno Setup удалить событие изменения индикатора

inno-setup

361 просмотра

1 ответ

104 Репутация автора

Есть ли какое-либо событие / функция, например, CurInstallProgressChangedдля индикатора выполнения CurProgressи MaxProgressзначений в форме удаления в Inno Setup?

Автор: Alexander Smith Источник Размещён: 04.05.2016 11:59

Ответы (1)


0 плюса

95702 Репутация автора

Решение

Там нет родной поддержки для этого.

Что вы можете сделать, это настроить таймер и следить за изменениями в UninstallProgressForm.ProgressBar.Position.

Код может быть таким:

[Code]

procedure TimerProc(h: LongWord; AMsg: LongWord; IdEvent: LongWord; dwTime: LongWord);
begin
  Log(Format(
    'Uninstall progress: %d/%d',
    [UninstallProgressForm.ProgressBar.Position, UninstallProgressForm.ProgressBar.Max]));
end;

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord;
  lpTimerFunc: LongWord): LongWord;
  external 'SetTimer@user32.dll stdcall';

procedure InitializeUninstallProgressForm();
begin
  if FileCopy(ExpandConstant('{app}\innocallback.dll'),
              ExpandConstant('{%TEMP}\innocallback.dll'), False) then
  begin
    SetTimer(0, 0, 100, CreateCallback(@TimerProc)); { every 100 ms }
  end;
end;

Для CreateCallbackработы требуется Inno Setup 6.

Если вы застряли с Inno Setup 5, вы можете использовать WrapCallbackфункцию из библиотеки InnoTools InnoCallback (для кода требуется версия Inno Setup 5 для Unicode). Но использование внешней библиотеки DLL из деинсталлятора сложно и имеет свои недостатки. Смотрите (ваше) Загрузка внешней DLL для процесса удаления в Inno Setup . Для другого решения (лучше, но более сложного для реализации), смотрите Как сохранить файлы удаления внутри деинсталлятора?

Автор: Martin Prikryl Размещён: 04.05.2016 12:35
Вопросы из категории :
32x32