2015-12-17 6 views
8

ähnlich wie diese Frage:
How to set the progress bar value in the [Run] section of the Inno Setup install script?Inno-Setup: Wie manipuliert Fortschrittsbalken im Abschnitt "Ausführen"?

Wenn die Inno Setup wird auf den [Run] Abschnitt, zeigt der Fortschrittsbalken bei 100% und hält in dieser Position.

Ich habe viele Dateien, die ich in diesem Run Abschnitt installieren, die ich den Fortschrittsbalken neu starten und steuern möchte, wie es jedes Programm installieren geht.

Die Statusmeldung ist leicht zu ändern (StatusMsg), aber der Fortschritt fehlt mir etwas. Könnt ihr mir bitte helfen?

Beispiel:

[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 

Da ich den Fortschrittsbalken steuern möchten während es Installation ist, ich weiß nicht, was zu tun ist. Ich dachte in vielleicht mit BeforeInstall Parameter, Erstellen eines Codes, um den Fortschrittsbalken auf 0, indem Sie etwas wie WizardForm.ProgressGauge.Position = 0; und in der AfterInstall Parameter, das Gegenteil, WizardForm.ProgressGauge.Position = 100;, aber wie man während der Installation ändern?

Danke.

+0

Wie würden Sie auch wissen, wie die Unter Installation los ist, dass in dem Hauptinstallationsprogramm präsentieren? –

+0

Ich weiß nicht viel über Delphi, aber es gibt eine API in Windows, die zurückgibt, wenn der Prozess ausgeführt wird. Die Idee war, zu überprüfen, ob der Prozess aktiv ist und den Fortschritt bis zum Abschluss des Prozesses zu machen. Dann gehe wieder auf Null und fange im nächsten wieder von vorne an. Aber wenn das nicht möglich ist, werde ich etwas Einfaches wie am Anfang versuchen, auf Null gehen und nach jedem Prozess ein wenig hochgehen, wie 10% in jedem. – KurayamiArai

+0

* "Machen Sie den Fortschritt bis zum Ende des Prozesses" * Aber Sie wissen nicht, wann der Prozess abgeschlossen wird, also wie berechnen Sie, welchen Prozentsatz zu zeigen? –

Antwort

10

Es wäre ziemlich schwierig, den Fortschrittsbalken zu aktualisieren, während ein anderer Prozess ausgeführt wird.

Ich sehe keinen Sinn darin, es zu versuchen, da Sie wahrscheinlich den Fortschritt des Sub-Installers nicht erkennen können, so dass Sie nicht wissen, worauf Sie den Fortschrittsbalken aktualisieren müssen.

Außer in besonderen Fällen, wenn der Sub-Installer eine API zur Verfügung stellt, um seinen Fortschritt zu melden.
Ein Beispiel finden Sie unter:


Um den Fortschrittsbalken zu aktualisieren nach Anzahl der Unter Installateure fertig sind, können Sie tun:

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

Teil des Fortschrittsbereich zu teilen Dateien für die Installation und den Rest siehe den Unter Installateure läuft,
Inno Setup - Prevent extraction of files from setting progress bar to 100%


Eine andere Option ist die Verwendung eines "Marquee" (= unendlich) Fortschrittsbalkenstils.

Siehe 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

funktioniert auch unter Windows XP, obwohl sie nicht mehr in der offiziellen Microsoft-Dokumentation aufgeführt werden. Getestet unter Windows XP SP3.

enter image description here

+0

Der erste war mehr oder weniger was ich gemacht habe. Der zweite ist eine gute Option. Danke vielmals. – KurayamiArai

+0

Ich habe gesehen, dass es nur auf Windows 6 und danach funktioniert? Kennen Sie einen einfachen Weg in Inno-Setup, Windows-Version zu überprüfen, so dass Windows wie XP, welche Version unter 6 ist, keinen Fehler anzeigen würde? – KurayamiArai

+0

Das Windows XP ist wahrscheinlich nicht aufgeführt, da es von Microsoft nicht mehr unterstützt wird. Aber es funktioniert auch dort, ich habe es getestet, bevor ich die Antwort gepostet habe. –

Verwandte Themen