Das Try-Except halte ich für sinnlos, streiche mal das Try sowie alles von Except bis zum folgenden End.
Zitat:
Erst wenn der Rückgabewert von CreateProcess true ist, ist der Befehl oder die Anwendung abgearbeitet.
Der Rückgabewert von CreateProcess wird natürlich nur einmal gesetzt. Er gibt nur an, ob das Erstellen erfolgreich war (false ist er z.B., wenn die Datei nicht existiert).
Das eigentliche Warten findet in WaitForSingleObject statt. Ein Prozess-
Handle ist nämlich genau dann signalisiert, wenn der Prozess beendet ist. INFINITE bedeutet, dass es keinen Timeout gibt.
Diese Funktion würde ich nicht in einem
GUI-Thread aufrufen. Falls du das tun willst, solltest du statt INFINITE einen kurzen Timeout setzen, beispielsweise 200 (Millisekunden) (das bewirkt, dass die Funktion zurückkehrt, wenn der Prozes beendet wurde oder der Timeout abgelaufen ist), oder gleich auf MsgWaitForMultipleObjects umsteigen, da das ermöglicht, Nachrichten parallel abzuarbeiten. Andernfalls kann es passieren, dass die Anwendung einfriert.