![]() |
AW: ShellExecuteEx + TerminateProcess
Das hatte ich auch schon probiert, aber scheinbar weiß die ping.exe nicht, was sie mit dem ">" anfangen soll und beendet sich sofort beim Aufruf. So wie ich es verstanden habe ist die Umleitung mittels ">" eine Funktionalität der Konsole.
|
AW: ShellExecuteEx + TerminateProcess
Zitat:
|
AW: ShellExecuteEx + TerminateProcess
nur mal eine frage so am rande, geht es wirklich um "ping.exe" oder andere CLI anwendungen?
ping kann man ja per indy und konsorten auch ohne CLI haben, unsichtbar im hintergrund, auswerten und schreiben in eine datei etc.... |
AW: ShellExecuteEx + TerminateProcess
Zitat:
@shebang: Werden denn selbstgeschriebene Konsolenprogramme ausgeführt? Wenn ja, dann würde ich das Konzept überdenken und die Programme entsprechend der Anforderungen anpassen. Prozesse töten sollte immer einer der letzten Wege sein. Grüße Dalai |
AW: ShellExecuteEx + TerminateProcess
Zitat:
|
AW: ShellExecuteEx + TerminateProcess
Frag' bitte mal die Suchmaschine Deiner Wahl nach createprocess with pipe site:delphipraxis.net. Da sollten ein paar brauchbare Ansätze zu finden sein. Momentan kann ich aber nicht entscheiden, welcher der für Dich Richtige ist.
Der beste Ansatz ist vermutlich hier zu finden: ![]() |
AW: ShellExecuteEx + TerminateProcess
Zitat:
![]() Nachdem es gestartet wurde noch eine liste anfertigen. Prozessliste nach "CLIname.exe" (ping.exe) bei den neu dazugekommenen durchforsten und PID merken. Bei abbruch dann zuerst die PID abschießen anschließend die CLI von der du ja bereits das handle kennst. (In manchen situationen ändert sich das handle allerdings, das sollte man im hinterkopf haben) Wenn es wiederum doch nur ums pingen geht würde ich komplett auf CLI verzichten und per ![]() ![]() |
AW: ShellExecuteEx + TerminateProcess
Zitat:
![]() ![]() Benutzung ist folgendermaßen:
Delphi-Quellcode:
var
windowsJob: TJobObject; shellExecuteInfo: TShellExecuteInfo; begin (...) windowsJob := TJobObject.Create(); ShellExecuteEx(shellExecuteInfo); windowsJob.moveProcessTo(shellExecuteInfo.Handle); end; |
AW: ShellExecuteEx + TerminateProcess
Zitat:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var StartupInfo : TStartupInfo; SecAttr : TSecurityAttributes; command : string; filename : string; begin command := 'ping.exe -t delphipraxis.net'; filename := 'D:\output.txt'; ZeroMemory(@SecAttr, SizeOf(TSecurityAttributes)); SecAttr.nLength := SizeOf(SecAttr); SecAttr.bInheritHandle := True; fileHandle := CreateFile(PChar(filename), GENERIC_WRITE, FILE_SHARE_WRITE, @SecAttr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); ZeroMemory(@StartupInfo, SizeOf(TStartupInfo)); StartupInfo.cb := SizeOf(TStartupInfo); StartupInfo.hStdOutput := fileHandle; StartupInfo.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := SW_HIDE; CreateProcess(nil, PChar(command), nil, nil, TRUE, 0, nil, nil, StartupInfo, ProcessInfo); end; procedure TForm1.Button2Click(Sender: TObject); begin TerminateProcess(ProcessInfo.hProcess, 0); CloseHandle(fileHandle); CloseHandle(ProcessInfo.hThread); CloseHandle(ProcessInfo.hProcess); end; |
AW: ShellExecuteEx + TerminateProcess
Schade das shebang Kommunikation mit mir vermeidet, sonst hätte ich meine timer-basierte CLI freie Lösung mal zeigen können, da es sich bis zum Ende ja doch nur um Ping gehandelt hat oder es war alles nur exemplarisch und ich bin schwer von begriff :-]
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:27 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