Inno Setup: как управлять индикатором выполнения в разделе Run?
похоже на этот вопрос:
Как установить значение индикатора выполнения в разделе [выполнить]сценария установки Inno Setup?
когда установка Inno попадает в прогресс бар показывает 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;
и
1 ответов
было бы довольно сложно обновить индикатор выполнения, пока выполняется другой процесс.
Я не вижу смысла пытаться это сделать, так как вы вряд ли сможете рассказать о прогрессе подустановщика, поэтому вы не будете знать, что обновить индикатор выполнения.
за исключением особых случаев, когда суб-установщик предоставляет API, чтобы сообщить о своем прогрессе.
Пример см. В разделе:
- Inno Setup получить прогресс от .NET Framework 4.5 (или выше) установщик для обновления позиции индикатора выполнения или
- Inno Setup-сделать Inno Setup Installer сообщить о ходе установки статус master 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 - Запретить извлечение файлов из установки индикатора выполнения до 100%
другой вариант-использовать стиль индикатора выполнения" marquee " (=infinite).
посмотреть стили управления прогресс-бар.
[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.