![]() |
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. |
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. |
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: ![]() Allerdings lässt er sich mit TerminateProcess nicht killen. |
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.
|
Re: Childprocess von CreateProcess Terminieren
Das war schon mal der erste Denkfehler.
Ich brauch das Handle. Das Handle bekomme ich zwar mit
Delphi-Quellcode:
zurück,
ChildProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION, false, PROCS.th32ProcessID);
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. |
Re: Childprocess von CreateProcess Terminieren
Versuche es mal mit
Delphi-Quellcode:
Das Terminieren ist ja wohl noch eine Stufe höher als nur "QUERY_INFORMATION" ;)
OpenProcess(PROCESS_ALL_ACCESS, false, PROCS.th32ProcessID);
|
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 20:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz