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, чтобы сообщить о своем прогрессе.
Пример см. В разделе:


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

[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;

enter image description here

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

enter image description here