2015-12-17 12 views
8

simile a questa domanda:
How to set the progress bar value in the [Run] section of the Inno Setup install script?Inno Setup: Come manipolare la barra di avanzamento nella sezione Esegui?

Quando l'Inno Setup arriva alla sezione [Run], la barra di avanzamento mostra al 100% e si ferma in questa posizione.

Ho molti file che installo in questa sezione Run, che desidero riavviare la barra di avanzamento e controllarla, come va installando ogni programma.

Il messaggio di stato è facile da modificare (StatusMsg), ma il progresso mi manca qualcosa. Potresti aiutarmi, per favore?

Esempio:

[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 

Dato Voglio controllare la barra di avanzamento durante la sua installazione, non so cosa fare. Ho pensato magari usando il parametro BeforeInstall, creando un codice per impostare la barra di avanzamento su 0 facendo qualcosa come WizardForm.ProgressGauge.Position = 0; e nel parametro AfterInstall, al contrario, WizardForm.ProgressGauge.Position = 100;, ma come cambiare durante l'installazione?

Grazie.

+0

Come vuoi anche sapere come il sub-installazione è in corso, per presentare che nella vostra installazione principale? –

+0

Non so molto di delphi, ma ci sono alcune API in Windows che restituiscono se il processo è in esecuzione. L'idea era di verificare se il processo è attivo e fare progressi fino alla fine del processo. Quindi torna di nuovo a zero e ricomincia da quello successivo. Ma se questo non è possibile, proverò qualcosa di semplice come all'inizio, andare a zero, e dopo ogni processo, salire un po ', come il 10% in ciascuno. – KurayamiArai

+0

* "progredire fino alla fine del processo" * Ma non sai quando finirà il processo, quindi come calcoli quale percentuale mostrare? –

risposta

10

Sarebbe piuttosto difficile aggiornare la barra di avanzamento, mentre un altro processo è in esecuzione.

Non vedo il punto di cercarlo, poiché è improbabile che tu possa dire il progresso del sub-installer, quindi non saprai a cosa aggiornare la barra di avanzamento.

Tranne casi speciali, quando il sub-installatore fornisce un'API per segnalare l'avanzamento.
Per un esempio, si veda:


Per aggiornare la barra di avanzamento in base al numero di sotto-installatori finiti, si può fare:

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

Per dividere parte della gamma di progresso per l'installazione dei file e il resto a l'esecuzione dei sub-installatori, vedere
Inno Setup - Prevent extraction of files from setting progress bar to 100%


Un'altra opzione consiste nell'utilizzare uno stile barra di avanzamento "perimetro" (= infinito).

Vedere 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

funziona anche su Windows XP, pur non essendo elencati nella documentazione ufficiale di Microsoft più. Testato su Windows XP SP3.

enter image description here

+0

Il primo era più o meno quello che ho fatto. Il secondo è una buona opzione. Molte grazie. – KurayamiArai

+0

Ho visto che funziona solo su Windows 6 e dopo? Conoscete un modo semplice in inno setup per controllare la versione di Windows, quindi Windows come XP, la cui versione è inferiore a 6, non presenterebbe un errore? – KurayamiArai

+0

Windows XP probabilmente non è elencato perché non è più supportato da Microsoft. Ma funziona anche lì, l'ho provato prima di pubblicare la risposta. –

Problemi correlati