Wie machen Sie Inno Setup schauen nicht gefroren ist, während der Durchführung einer lange Exec?
Lange Exec ist die Installation .NET 3.5 und out-Skript wird auf der Grundlage dieses:
http://www.blackhillsoftware.com/blog/2006/06/26/using-innosetup-with-the-dotnet-framework/
Das problem ist, dass es mit "ewWaitUntilTerminated" denn wir brauchen zum erfassen der exit-code. Es ist ein wenig schlimmer durch die Tatsache, dass wir es läuft /passive /norestart, so dass es weniger Arbeit auf dem Benutzer-Teil (Vielleicht sollten wir nicht?)
Ist die einfachste Möglichkeit, die ich denken konnte, um das Fenster zu schließen, während Sie es installieren .NET und zeigt es noch einmal, wenn es fertig ist, aber ich bin mir nicht sicher, wie das zu tun.
Wäre die ideale Lösung, um zu zeigen, eine Fortschritt Seite, aber es scheint nicht, wie es wäre möglich, da würden wir brauchen, um wieder richtig Weg, aber irgendwie noch benachrichtigt werden, wenn der Prozess beendet und erfassen Sie die exit-code, sonst würden wir nur einen ewigen Fortschritt bar.
Irgendwelche Ideen auf, wie man über diese?
Edit: Minimieren würde wahrscheinlich besser sein, aber nicht wissen, wie zu tun, dass entweder. Wir machen eine Meldung angezeigt, die den Benutzer darüber informiert, dass der Prozess dauert 10-20 Minuten, aber das problem ist, dass die Haupt-setup-Formular komplett zugefroren ist, kann nicht verschieben, minimieren oder etwas zu tun mit es. Auch das laufen /passiven die .NET installer nicht wirklich zeigen keine Fortschritte für eine gute minute oder zwei auf einer langsameren Maschine.
- Gerade verbrachte Sie einen Nachmittag der Installation eine demo-app, die nicht beginnen, indem Warnung mir, dass Sie es wollen würde .NET 3.5, bis nach dem ersten obligatorischen Neustart... können nur sagen, dass die Benutzer können die empfindlich, was unerwartet langen sub-installiert. Ich habe nicht eine technische Antwort, jedoch.
- Dann .Auch NET erforderte einen Neustart, nach dem das ursprüngliche app-setup hatte längst vergessen, dass es ausgeführt wurde, und gefunden werden mußte manuell in einem temp-Ordner und erneut ausführen, um tatsächlich installieren Sie die Anwendung.
- Ja, informieren wir, dass die Benutzer und Ihnen die Möglichkeit zu stornieren, bevor das framework installiert ist, und die wir unterdrücken .net installer neu starten und erfassen es in der return-code, um den Neustart zu uns
- Siehe auch meine Antwort auf Inno-Setup: Wie ändere lang laufende Skript, so wird es nicht einfrieren GUI?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben wir benötigt, um zu installieren .NET mit ein paar Produkten, und haben sich in zwei Ansätze:
Haben wir ehrlich gesagt mehr Glück gehabt mit der 2. option, vor allem jetzt, dass mehr system-admins scheinen zum sperren von desktops zu einem gewissen Grad.
Einen Weg zu machen, Innosetup "nicht Aussehen eingefroren" ist, um eine "fake" Fortschrittsanzeige, wie ein Festzelt, um zu zeigen, dass etwas Los ist. Aber diese lösen nicht das "Fenster nicht dragable /bewegliche" problem.
So, ein anderer Weg ist, um wirklich Fixierung der Innosetup-GUI, während der lange Laufenden Prozess ausgeführt wird:
Den "lang andauernden Prozess -" ist der Vertrag via ShellExecuteEx().
Dann wird der installer verwendet eine while-Schleife mit der Bedingung
WaitForSingleObject
und eine sehr minimale timeoutausführen
AppProcessMessage
.AppProcessMessage
ist, sich eine Hilfsfunktion. Es nutzt die "generischen" code erstellen " - Anwendung.ProcessMessages"-ish-Verfahren, mit der WinAPI-FunktionPeekMessage()
,TranslateMessage()
undDispatchMessage()
.Seine Aufgabe ist es, die Botschaft Pumpe zu InnoSetup GUI.
Dieser trick macht die Fenster reaktionsschnell Weg/dragable wieder,
während die "lange Laufenden Prozess" verarbeitet in den hintergrund.
Dies ist die Quelle für die Ausführung loop:
Folgende KERNAUSSAGE für
unzip.iss
enthält den code für eine eigenständige Entpacken Helfer für die Ausführung von 7zip, ohne zu blockieren die GUI InnoSetup, einschließlich der bits und Stücke, die für das arbeiten mit derAppProcessMessage
Funktion.In diesem Fall "unzip" ist nur ein Beispiel und könnte Sie ersetzen die ausgeführte Anwendung mit dem, was, ein .Net installer oder andere lang laufende Aufgabe.
Obwohl es wahrscheinlich ein leichtes wäre, weiß ich nicht empfehlen, verstecken Sie sich an Ihren Installateur während der .Net installer läuft. Ich habe gesehen, andere Installateure tun, und wenn es passiert, denke ich, dass die installation beendet ist, und dann bin ich verwirrt, wenn ich finde, dass es das wirklich nicht. (Und wenn die installation wirklich fertig ist, kann ich nicht sicher sein, dass, entweder. Vielleicht ist es nur verbarg sich wieder.)
Können Sie die Anzeige von benutzerdefinierten Seiten in das Inno-Setup-Assistenten. Die Herstellung einer solchen Seite ein Fortschrittsbalken angezeigt und halten es korrekt wäre wohl eine Herausforderung sein, aber zumindest könnten Sie eine Nachricht auf der Seite des Assistenten zu sagen, dass Ihr Installateur warten, für die .Net installer, bevor Sie fortfahren. Siehe "Verwenden von Benutzerdefinierten Assistenten-Seiten" - Abschnitt der Hilfe-Datei.
Können Sie einfach verstecken Sie den Installationsassistenten Formular durch aufrufen
aber ich bin damit einverstanden, dass dies ist nicht wirklich hübsch.
Es ist schon 5 Jahre her, seit du die Frage gestellt aber hier ist meine Antwort sowieso.
Vor dem Aufruf von Exec() können Sie die Nachricht, die angezeigt wird, die von Inno-Setup, die über dem Fortschrittsbalken wie diese:
show a marquee progress bar
. Außerdem speichern Sie die Beschriftung derStatusLabel
und es wieder zurück, wenn es zu verändern.