2015-12-17 2 views
8

Похожие на этот вопрос:
How to set the progress bar value in the [Run] section of the Inno Setup install script?Inno Setup: как манипулировать индикатором выполнения в разделе «Выполнить»?

Когда Setup Inno попадает в раздел [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;, но как изменить во время установки?

Спасибо.

+0

Как бы вы даже знаете, как суб-установка происходит, чтобы представить, что в основной программе установки? –

+0

Я не знаю много о delphi, но есть некоторые API в Windows, которые возвращаются, если процесс выполняется. Идея состояла в том, чтобы проверить, активен ли процесс и сделать ход до завершения процесса. Затем снова вернитесь к нулю и начните в следующем. Но если это невозможно, я попробую что-то простое, как в начале, перейдите к нулю, и после каждого процесса немного поднимитесь, как 10% в каждом. – KurayamiArai

+0

* «Продвигайтесь вперед до завершения процесса» * Но вы не знаете, когда закончится процесс, так как вы можете рассчитать, какой процент показывать? –

ответ

10

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

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

За исключением особых случаев, когда суб-установщик предоставляет 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 Setup - Prevent extraction of files from setting progress bar to 100%


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

См. Progress bar control styles.

[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

+0

Первый был более или менее тем, что я сделал. Второй вариант - хороший вариант. Большое спасибо. – KurayamiArai

+0

Я видел, что он работает только на окнах 6 и после? Вы знаете простой способ установки inno для проверки версии Windows, поэтому Windows, такая как XP, какая версия меньше 6, не будет представлять ошибку? – KurayamiArai

+0

Windows XP, вероятно, не указана, поскольку Microsoft больше не поддерживается. Но он работает там тоже, я проверял его перед отправкой ответа. –