Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Warten, bis aufgerufener Prozess beendet ist (https://www.delphipraxis.net/98541-warten-bis-aufgerufener-prozess-beendet-ist.html)

Binärbaum 28. Aug 2007 22:00


Warten, bis aufgerufener Prozess beendet ist
 
Hallo!

Wie kann man aus einer Delphi-Anwendung ein anderes Programm starten und dann die Delphianwendung solange warten lassen, bis das gestartete Programm beendet ist? (Hintergrund ist, dass ich aus der Anwendung heraus mit einem anderen Programm ein paar Daten von einem entfernten Server abgreife, und warten will, bis dieses Programm damit fertig ist. Je nach Verbindung kann die Programmlaufzeit dabei stark schwanken.)
Mit ShellExecute bzw. CreateProcess habe ich es schon versucht, jedoch liefern beide Funktionen nicht das gewünschte Ergebnis. :(

MfG
Binärbaum

mkinzler 28. Aug 2007 22:01

Re: Warten, bis aufgerufener Prozess beendet ist
 
WaitForSingleObject()

Binärbaum 28. Aug 2007 22:14

Re: Warten, bis aufgerufener Prozess beendet ist
 
Zitat:

Zitat von mkinzler
WaitForSingleObject()

Erstmal danke für den Hinweis. :)
(Notiz an mich: MSDN - WaitForSingleObject)

Allerdings glaube ich mich zu erinnern, dass es auch eine entsprechende Funktion für den Aufruf eines Prozesses gibt, die dann auch direkt wartet, bis der aufgerufene Prozess abgearbeitet ist, jedoch ist mir der Name entfallen. Weiß jemand, wie diese Funktion heißt?

silver-moon-2000 28. Aug 2007 23:46

Re: Warten, bis aufgerufener Prozess beendet ist
 
Zitat:

Zitat von Binärbaum
Allerdings glaube ich mich zu erinnern, dass es auch eine entsprechende Funktion für den Aufruf eines Prozesses gibt, die dann auch direkt wartet, bis der aufgerufene Prozess abgearbeitet ist, jedoch ist mir der Name entfallen. Weiß jemand, wie diese Funktion heißt?

Meinst Du zufällig das hier?:
Delphi-Quellcode:

procedure ShellExecAndWait(dateiname: string; Parameter: string);
var executeInfo: TShellExecuteInfo;
    dw: DWORD;
begin
 FillChar(executeInfo, SizeOf(executeInfo), 0);
 with executeInfo do begin
   cbSize := SizeOf(executeInfo);
   fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
   Wnd := GetActiveWindow();
   executeInfo.lpVerb := 'open';
   executeInfo.lpParameters := PChar(Parameter);
   lpFile := PChar(dateiname);
   nShow := SW_SHOWNORMAL;
 end;
 if ShellExecuteEx(@executeInfo) then dw := executeInfo.HProcess
 else begin
   ShowMessage('Fehler: ' + SysErrorMessage(GetLastError));
   Exit;
 end;
 while WaitForSingleObject(executeInfo.hProcess, 50) <> WAIT_OBJECT_0 do
   Application.ProcessMessages;
 CloseHandle(dw);
end;
Ruft das programm mittels ShellExecute(Ex) auf und wartet mittels WaitForSingleObject auf dessen Ende.

muss allerdings gestehen, dass ich nicht mehr weiß, wo ich das herhabe

Binärbaum 29. Aug 2007 01:12

Re: Warten, bis aufgerufener Prozess beendet ist
 
Zitat:

Zitat von silver-moon-2000
Meinst Du zufällig das hier?:
...
Ruft das programm mittels ShellExecute(Ex) auf und wartet mittels WaitForSingleObject auf dessen Ende.

Nein, das meinte ich nicht, aber es hilft ein wenig. :) Die von dir gezeigte Variante läuft ja auch auf WaitForSingleObject() hinaus, was schon von mkinzler vorgeschlagen wurde. Was ich meinte, war eine einzelne Funktion oder Prozedur aus der WinAPI(?), die sowohl das in den Parametern übergebene Programm aufruft als auch gleich noch wartet, bis das aufgerufene Programm beendet ist, und erst dann einen Rückgabewert liefert.
Mittlerweile habe ich das Problem jedoch so gelöst, dass ich statt dem externen Programm mit Hilfe der Indy-Componenten die Daten vom Server hole. So "weiß" meine Anwendung dann auch ohne Zugriff auf die WinAPI, wann die Daten da sind und das anfängliche Problem stellt sich nun gar nicht mehr.
Trotzdem nochmal danke an euch beide. :)

MfG
Binärbaum


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz