Ich habe eine hoffentlich schnelle Frage: Ist es möglich, die Ausführung von ShellExecute ein wenig zu verzögern?
Ich habe eine Anwendung mit Autoupdater. Nachdem es alle notwendigen Dateien usw. heruntergeladen hat, benennt es die aktuellen Dateien in * .OLD und das neue als das vorherige um. Einfach genug. Aber dann muss ich diese .OLD-Dateien löschen. Diese 'Aufräum'-Prozedur wird auf MainForm.OnActivate ausgeführt (mit einer Überprüfung, ob es der erste Aktivierungsprozess ist). Aber das passiert anscheinend zu schnell (ich bekomme False von DeleteFile). Dies ist die Vorgehensweise:
%Vor%Diese Prozedur soll die Anwendung neu starten. Ich bin mir sicher, dass das Löschen Problem durch den schnellen Start der zweiten Anwendung verursacht wird, denn wenn ich es selbst neu starte und es ein wenig Zeit gebe, werden die Dateien normalerweise gelöscht.
tl; dr Version: Ich muss ShellExecute () aufrufen, das ein bisschen wartet (etwa 0,1 Sek.) und DANN den Befehl ausführt.
Hinweis
Ich habe versucht, mit dem Befehl -ping zu versuchen, es zu verzögern, aber es hat nicht funktioniert.
Vielen Dank im Voraus
Bearbeiten: Umformuliert
Ich muss das tun || Erste App schließt sich; Warte 100 ms; zweite App öffnet sich ||. Ich muss ShellExecute zuerst aufrufen, dann warten, bis die aufrufende Anwendung sich vollständig schließt, dann die Shell ausführen (d. H. Zweite Anwendung öffnen)
Sie machen einen Autopatcher richtig?
Ich hatte das gleiche Problem, und so habe ich es umgangen:
Sie starten eine zweite App mit dem Argument "--delay" oder so ähnlich. Die zweite Anwendung handhabt das Argument "--delay" und schläft für 100 ms und läuft dann normal weiter.
Diese Routine ist ein Util Code in unserer Game Engine. Es kann eine ausführbare Datei ausführen und optional darauf warten, dass es beendet wird. Es wird seinen Exit-Code zurückgeben:
%Vor%Hier ist ein Code, der prüfen kann, ob ein Prozess existiert. Also ... aktuelle App ruft den Updater auf und beendet sich. Der Updater kann prüfen, ob die alte App beendet wurde und es tun (umbenennen, aktualisieren, löschen, usw.):
%Vor% Wenn Sie CreateProcess
anstelle von ShellExecute
verwenden können, können Sie auf die Prozesskennung warten. Der Prozess-Handle wird signalisiert, wenn die Anwendung beendet wird. Zum Beispiel:
Wenn ExecAndWait zurückkehrt, können Sie bei Bedarf 100 ms lang schlafen.
N @
Tags und Links delphi delay shellexecute