Inno Setup: как манипулировать индикатором выполнения в разделе «Выполнить»?

Подобно этому вопросу:
Как установить значение строки выполнения в разделе [Запуск] установочного скрипта Inno Setup?

Когда Inno Setup попадает в раздел [Run] , индикатор выполнения показывает 100% и останавливается в этом положении.

У меня есть много файлов, которые я устанавливаю в этом разделе « Run », который я хочу перезапустить индикатор выполнения и управлять им, поскольку он устанавливает установку каждой программы.

Сообщение о состоянии легко изменить ( StatusMsg ), но прогресс я чего-то не хватает. Не могли бы вы, ребята, помочь мне, пожалуйста?

Пример:

 [Run] Filename: "msiexec.exe"; Parameters: "/i ""msxml.msi"" /quiet"; \ StatusMsg: "MSXML..."; Flags: runascurrentuser Filename: "msiexec.exe"; Parameters: "/i ""capicom_dc_sdk.msi"" /quiet"; \ StatusMsg: "CAPICOM..."; Flags: runascurrentuser 

Поскольку я хочу контролировать индикатор выполнения во время его установки, я не знаю, что делать. Я подумал, возможно, используя параметр BeforeInstall , создав код, чтобы установить индикатор выполнения в 0, выполнив что-то вроде WizardForm.ProgressGauge.Position = 0; и в параметре AfterInstall , напротив, WizardForm.ProgressGauge.Position = 100; , но как изменить во время установки?

Благодарю.

Было бы довольно сложно обновить индикатор выполнения, пока выполняется другой процесс.

Я не вижу смысла в этом, так как вы вряд ли сможете рассказать о прогрессе суб-установщика, поэтому вы не будете знать, что обновить индикатор выполнения.

За исключением особых случаев, когда суб-установщик предоставляет API, чтобы сообщить о его прогрессе.
Например, см.

  • Inno Setup Получите прогресс от установщика .NET Framework 4.5 (или выше), чтобы обновить положение индикатора выполнения или
  • Inno Setup – программа установки Inno Setup Installer сообщит о статусе выполнения установки для мастера установки .

Чтобы обновить индикатор выполнения в соответствии с количеством завершенных компонентов, вы можете выполнить:

 [Run] FileName: "process1"; BeforeInstall: UpdateProgress(0); AfterInstall: UpdateProgress(33) FileName: "process2"; AfterInstall: UpdateProgress(66) FileName: "process3"; AfterInstall: UpdateProgress(100) [Code] procedure UpdateProgress(Position: Integer); begin WizardForm.ProgressGauge.Position := Position * WizardForm.ProgressGauge.Max div 100; end; 

Чтобы разделить часть диапазона выполнения для установки файлов, а остальное – на выполнение подинсталляторов, см.
Inno Setup – предотвращает извлечение файлов из установочного бара до 100%


Другой вариант – использовать стиль шага «marquee» (= бесконечный).

См. Стили управления стилями выполнения .

 [Run] FileName: "process1"; BeforeInstall: SetMarqueeProgress(True) FileName: "process2" FileName: "process3"; AfterInstall: SetMarqueeProgress(False) [Code] procedure SetMarqueeProgress(Marquee: Boolean); begin if Marquee then begin WizardForm.ProgressGauge.Style := npbstMarquee; end else begin WizardForm.ProgressGauge.Style := npbstNormal; end; end; 

введите описание изображения здесь

Работает даже в Windows XP, несмотря на то, что больше не упоминается в официальной документации Microsoft. Протестировано в Windows XP SP3.

введите описание изображения здесь

Давайте будем гением компьютера.