![]() |
Programm beenden dass aus Konsole (gepiped) gestartet wurde?
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!
Ich leite per Pipes die Konsole in ein Memo um. (code siehe anhang) Per CloseHandle oder TerminateProcess schaffe ich es auch die zuvor gestarte CMD.exe zu beenden aber nur solange ich nicht ein weiteres Programm in der Konsole gestartet habe: Beispiel: Programm starten, und vom programm aus ein DOS-Zeilenbasiertes Programm starten, sodass dieses als "unterprogramm" der cmd.exe läuft. Jetzt scheint das Closehandle bwz das TerminateProcess keine wirkung mehr zu haben?! Vielleicht hab ich micht etwas umständlich ausgedrückt, aber ich hoffe ihr wisst was ich meine...wie muss ich vorgehen? muss ich zunächst alle programme die von der cmd.exe aus gestartet wurden, beenden? wie komme ich an die Handles dieser programm? Viele Grüße, Alleinherrscher |
Re: Programm beenden dass aus Konsole (gepiped) gestartet wu
okay, nachts um 1 uhr is wohl keiner mehr online, ungünstige zeit, von daher: PUSH ;)
Oder um die Frage etwas zu verfeinern: Wie finde ich alle Programme, die von der CMD.exe (welche ja von meinem Programm gestartet wurde) aus gestartet wurden und kann diese beenden egal ob sie reagieren oder nicht...? Vg, alleinherrscher |
Re: Programm beenden dass aus Konsole (gepiped) gestartet wu
Okay ich hab das Problem gelöst, indem ich eure "KillTask" Funktion etwas umgeschrieben habe:
Namlich von dem Code:
Delphi-Quellcode:
In "KillChildProcesses":
function KillTask(const AExeName: string): boolean;
var p: TProcessEntry32; h: THandle; begin Result := false; p.dwSize := SizeOf(p); h := CreateToolHelp32Snapshot(TH32CS_SnapProcess, 0); try if Process32First(h, p) then repeat if AnsiLowerCase(p.szExeFile) = AnsiLowerCase(AExeName) then Result := TerminateProcess(OpenProcess(Process_Terminate, false, p.th32ProcessID), 0); until (not Process32Next(h, p)) or Result; finally CloseHandle(h); end; end;
Delphi-Quellcode:
function KillChildProcesses(ProcessID:Cardinal): boolean;
var p: TProcessEntry32; h: THandle; begin Result := false; p.dwSize := SizeOf(p); h := CreateToolHelp32Snapshot(TH32CS_SnapProcess, 0); try if Process32First(h, p) then repeat if p.th32ParentProcessID=ProcessID then begin KillChildProcesses(p.th32ProcessID); Result := TerminateProcess(OpenProcess(Process_Terminate,false,p.th32ProcessID),0); end; until (not Process32Next(h, p)); finally CloseHandle(h); end; end; Diese Funktion killt alle Prozesse, die jemand von der eigenen Anwendung aus gestartet wurden, wenn man sie so aufruft: killchildprocesses(GetCurrentProcessId); Grüße, euer alleinherrscher |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 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-2025 by Thomas Breitkreuz