Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Childprocess von CreateProcess Terminieren (https://www.delphipraxis.net/150272-childprocess-von-createprocess-terminieren.html)

Alex.P 12. Apr 2010 09:49


Childprocess von CreateProcess Terminieren
 
Hallo,

ich starte über CreateProcess eine Dos-Batch in der Windows cmd.
Ich kann das Programm nicht direkt starten, da ich sonst die Konsolenausgabe nicht umgeleitet bekomme.
Also wird ein cmd.exe Prozess gestartet, der wiederum ein ChildProzess mit meinem Programm startet.

Mit ProzessHandle := ProcessInfo.hProcess bekomme ich allerdings nur den Handle der cmd zurück.

Meine Frage ist jetzt, wie ich an den korreckten Child Process Handle komme wenn ich ihn terminieren will.
Über den Namen der exe geht es nicht, da ich das Programm mehrmals gleichzeitig starte.

Neutral General 12. Apr 2010 10:20

Re: Childprocess von CreateProcess Terminieren
 
Hallo,

Ich würde mal sagen gar nicht, oder nicht ohne größere Aktionen.
Kannst du nicht das jeweilige Programm selbst starten und die Konsolenausgabe über Pipes umleiten? Das müsste doch gehen.

Alex.P 12. Apr 2010 10:27

Re: Childprocess von CreateProcess Terminieren
 
Das umleiten über Pipes geht auch nicht. Das Programm puffert seine Ausgabe extrem und gibt die Ausgabe nicht direkt an die Konsole weiter. Jeder Versuch es direkt auszuführen ist gescheitert.

Habe hier eine Funktion gefunden, mit der ich den ChildProcess ID korrekt zurück bekomme:
http://www.delphipraxis.net/internal...ct.php?t=95503

Allerdings lässt er sich mit TerminateProcess nicht killen.

Neutral General 12. Apr 2010 10:30

Re: Childprocess von CreateProcess Terminieren
 
Über die ID kannst du doch per OpenProcess das Handle bekommen. Und damit kannst du dann über TerminateProcess den ChildProcess killen.

Alex.P 12. Apr 2010 11:35

Re: Childprocess von CreateProcess Terminieren
 
Das war schon mal der erste Denkfehler.
Ich brauch das Handle.
Das Handle bekomme ich zwar mit
Delphi-Quellcode:
ChildProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION, false, PROCS.th32ProcessID);
zurück,
TerminateProcess kommt aber immer noch mit false zurück und der Prozess läuft weiter.
Der Code läuft im einem Thread, Synchronize bringt allerdings auch nichts.
Der ParentProzess lässt sich ohne weiteres killen.

Neutral General 12. Apr 2010 11:37

Re: Childprocess von CreateProcess Terminieren
 
Versuche es mal mit

Delphi-Quellcode:
OpenProcess(PROCESS_ALL_ACCESS, false, PROCS.th32ProcessID);
Das Terminieren ist ja wohl noch eine Stufe höher als nur "QUERY_INFORMATION" ;)

Alex.P 12. Apr 2010 11:42

Re: Childprocess von CreateProcess Terminieren
 
Ja, das wars!!!
Super!!!
Danke!!!

Hab jetzt ne Exception, aber das find ich dann alleine raus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:05 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