Entwickler-Ecke
Windows API - CreateProcess 3 Fragen...
stOrM! - Mo 21.05.07 14:20
Titel: CreateProcess 3 Fragen...
Hallo,
vielleicht erstmal das wesentliche, ich versuche mittels CreateProcess eine Liste von Programmen abzuarbeiten welche installiert werden sollen. (Diese Programme die in einer Liste stehen verfügen alle über Parameter = Silent Switches /S oder /qb usw)
Frage1:
Ich habe mal das Setup des M$ LiveMessengers entpackt, da ich nur das eigentliche Setup brauchte und nicht dem dummen Toolbars usw. Ich habe also das Setup mit dem Namen MSMSGS.MSI
das habe ich dann mittels CreateProcess und dem Parameter /qb gestartet, seltsamerweise tat sich gar nichts, zu Testzwecken habe ich alles noch in Anführungstrichen gesetzt, hat aber auch nichts bewirkt Setup wird nicht ausgeführt.
Nun das kuriose, wenn ich das Setp über ShellExecute mit gleichem Parameter ausführe Bingo! Setup wird ausgeführt LiveMessenger wird silent installiert, übrigends gehts auch wenn ich eine BatchDatei bauen und die ablaufen lasse. Wieso klappt das nicht mit CreateProcess, welches ich für die anderen Setups ebenfalls benutze und da läuft es einwandfrei...
Frage2:
Gibt es eine Möglichkeit eine Progressbar upzudaten weil meine Liste der Setups abgearbeitet wird? Also sagen wir ich habe 10 Setups die ausgefürt werden müssen, Wenn Setup1 beendet wird Progressbar1 update, jetzt Aufruf Setup2 nach beendigung wieder update der Progressbar usw...
Frage3:
Eigentlich das wichtigste, gibt es irgendeine Möglichkeit circa abzuschätzen wann alle Programme komplett installiert sind?
So in etwa wie bei der Windows Installation: Windows installation in ca 13 Minuten...
abgeschlossen.
Muss ja nicht 100% sein aber so circa wäre super, ich weiss nicht wie ich das abschätzen soll wann die Setups alle durchlaufen wurden? Ich hab ja eigentlich nur die Anzahl der Setups (zur Zeit 9) und bei welchem Setup ich gerade bin, reicht das aus?
viele Grüsse
s!
BenBE - Mo 21.05.07 16:11
1. CreateProcess startet eine Anwendung. MSI-Files sind aber keine Anwendungen, sondern Datendateien für eine Anwending. Du musst also in der Registry auslesen, welche Anwendung für den Start von MSI-Files benötigt wird. Nichts anderes macht ShellExecute intern auch ...
2. Du musst mit WaitForSingleObject auf die Beendigung des gestarteten Prozesses warten. Beispiele hierfür solltest Du im Forum finden. Als Timeout-Wert empfiehlt sich eine Sekunde (Timeout=1000), damit Du zyklisch Application.ProcessMessages zum Neuzeichnen ausführen kannst.
3. Wenn Du die Anzahl weißt, und die Anzahl der fertigen, dann reicht das vollkommen, solange alle Setups etwa gleich lang benötigen. Einfach Bisherige Zeit * GesamtzahlSetups / Fertige Setups rechnen und in Minuten anzeigen. Beachte, dass Du während das erste Setup läuft, noch keine Restzeit machen kannst ...
stOrM! - Mo 21.05.07 16:31
BenBE hat folgendes geschrieben: |
1. CreateProcess startet eine Anwendung. MSI-Files sind aber keine Anwendungen, sondern Datendateien für eine Anwending. Du musst also in der Registry auslesen, welche Anwendung für den Start von MSI-Files benötigt wird. Nichts anderes macht ShellExecute intern auch ...
2. Du musst mit WaitForSingleObject auf die Beendigung des gestarteten Prozesses warten. Beispiele hierfür solltest Du im Forum finden. Als Timeout-Wert empfiehlt sich eine Sekunde (Timeout=1000), damit Du zyklisch Application.ProcessMessages zum Neuzeichnen ausführen kannst.
3. Wenn Du die Anzahl weißt, und die Anzahl der fertigen, dann reicht das vollkommen, solange alle Setups etwa gleich lang benötigen. Einfach Bisherige Zeit * GesamtzahlSetups / Fertige Setups rechnen und in Minuten anzeigen. Beachte, dass Du während das erste Setup läuft, noch keine Restzeit machen kannst ... |
YO bin ich bescheuert!
Hast vollkommen Recht bezüglich der Anwendung, da muss ich mal in der Registry rumwühlen!
Ich probier mal aus was du geposchtet hast meld mich wieder! Bis dahin schonmal vielen Dank!
PS. Ein wenig unklar ist der letzte Punkt für mich noch, die Setups benötigen nicht etwas die gleiche Zeit als vergleich VLC gegenüber OpenOffice kann man sich ja denken das das letztere länger brauchen würde, hast du da eine andere Möglichkeit für mich, wäre super!
Kannst Du mir eventuell den Punkt mit: "bisherige Zeit.. während des ersten Setups usw" codetechnisch verdeutlichen?
Ich weiss grad nicht wo ich die Zeitprüfung starten soll noch wo sie Aufhören muss bzw. usw. ? *verwirrt
BenBE - Mo 21.05.07 16:47
Ganz einfach ...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| StartTime := GetTickCount;
For X := 0 To Setups.Count - 1 do Begin CompletedSetups := X; RunSetup(Setups[X]); end; |
Und für die Restzeit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm.RemainingTimeTimer(Sender: TObject); begin If CompletedSetups = 0 Then Restzeit.Caption := 'unbekannt ...' else Restzeit.Caption := Format('%.1f Minuten', (GetTickCount - StartTime) / (1000 * 60 * (Setups.Count - CompletedSetups))); end; |
stOrM! - Mo 21.05.07 17:17
BenBE hat folgendes geschrieben: |
Ganz einfach ...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| StartTime := GetTickCount;
For X := 0 To Setups.Count - 1 do Begin CompletedSetups := X; RunSetup(Setups[X]); end; |
Und für die Restzeit:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm.RemainingTimeTimer(Sender: TObject); begin If CompletedSetups = 0 Then Restzeit.Caption := 'unbekannt ...' else Restzeit.Caption := Format('%.1f Minuten', (GetTickCount - StartTime) / (1000 * 60 * (Setups.Count - CompletedSetups))); end; | |
Wow du bist schnell :-)
Alles klar soweit bezüglich, wenn die Setups nicht gleich lang brauchen in etwa, gibt es eine etwas genauere Zeitprüfung?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!