AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ShellExecuteEx + TerminateProcess

Ein Thema von shebang · begonnen am 22. Apr 2021 · letzter Beitrag vom 27. Apr 2021
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#1

AW: ShellExecuteEx + TerminateProcess

  Alt 22. Apr 2021, 13:28
Bist du sicher, dass der Prozess nicht beendet wird? Du killst cmd.exe, aber die Ausgabe kommt von ping.exe. Führt man eine CMD von Hand aus (mit ping auf irgendeinen Host) und killt per Task-Manager die cmd.exe, bleibt das Konsolenfenster dennoch offen und wird erst bei Abbruch der ping.exe (z.B. per Strg+C) geschlossen.

Grüße
Dalai
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
140 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: ShellExecuteEx + TerminateProcess

  Alt 22. Apr 2021, 14:40
Bist du sicher, dass der Prozess nicht beendet wird? Du killst cmd.exe, aber die Ausgabe kommt von ping.exe. Führt man eine CMD von Hand aus (mit ping auf irgendeinen Host) und killt per Task-Manager die cmd.exe, bleibt das Konsolenfenster dennoch offen und wird erst bei Abbruch der ping.exe (z.B. per Strg+C) geschlossen.
Komme ich denn irgendwie an das Handle von ping.exe, damit ich dem ein Strg+C schicken kann?
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#3

AW: ShellExecuteEx + TerminateProcess

  Alt 22. Apr 2021, 15:41
Was passiert denn bei
Delphi-Quellcode:
 ShExecInfo.cbSize := SizeOf(ShellExecuteInfo);
  ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
  ShExecInfo.lpVerb := 'open';
  ShExecInfo.lpFile := 'ping.exe';
  ShExecInfo.lpParameters := '-t delphipraxis.net';
  ShExecInfo.nShow := SW_SHOW;
Brauchst Du denn überhaupt eine Konsole als "Zwischenwirt"?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: ShellExecuteEx + TerminateProcess

  Alt 22. Apr 2021, 16:00
Das kann hinten und vorne nicht klappen.
Erstens machst du PostMessage mit einem Handle auf den Prozess. Man schickt aber Messages an ein Fensterhandle (HWND).

Zweitens interessieren sich Konsolenanwendungen herzlich wenig für Messages.

Ich bleibe dabei, ich sehe zwei Möglichkeiten:
1. Man verbindet sich mit der Konsole des gestarteten Prozesses und schickt ihm ein Ctrl+C mittels GenerateConsoleCtrlEvent

oder

2. Man packt das Ding in einem Job und wenn man es wirklich hart abschießenb will schließt man einfach den Job.


Ich nutze unter Windows die Jobs gerne, sie funktionieren zuverlässig und sind wirklich das Mittel der Wahl wenn man selbst gestartete Prozesse ordentlich und sicher verwalten will.
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
140 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: ShellExecuteEx + TerminateProcess

  Alt 22. Apr 2021, 17:37
Man packt das Ding in einem Job und wenn man es wirklich hart abschießenb will schließt man einfach den Job.
Hast du zufällig einen Link zu einem Bespiel, wie man das in Delphi löst?
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: ShellExecuteEx + TerminateProcess

  Alt 22. Apr 2021, 18:36
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....
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: ShellExecuteEx + TerminateProcess

  Alt 23. Apr 2021, 09:03
nur mal eine frage so am rande, geht es wirklich um "ping.exe"
Ne, das geht meiner Ansicht nach aber aus den ersten Sätzen des Eröffnungsposts hervor.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: ShellExecuteEx + TerminateProcess

  Alt 23. Apr 2021, 14:03
Hast du zufällig einen Link zu einem Bespiel, wie man das in Delphi löst?
Ja, Sourcecode (2 Dateien) sind hier. Die Header hatte ich hiervon übernommen.

Benutzung ist folgendermaßen:
Delphi-Quellcode:
var
   windowsJob: TJobObject;
   shellExecuteInfo: TShellExecuteInfo;   
begin
   (...)
   windowsJob := TJobObject.Create();
   ShellExecuteEx(shellExecuteInfo);
   windowsJob.moveProcessTo(shellExecuteInfo.Handle);
end;
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
140 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: ShellExecuteEx + TerminateProcess

  Alt 22. Apr 2021, 16:48
Was passiert denn bei
Delphi-Quellcode:
 ShExecInfo.cbSize := SizeOf(ShellExecuteInfo);
  ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
  ShExecInfo.lpVerb := 'open';
  ShExecInfo.lpFile := 'ping.exe';
  ShExecInfo.lpParameters := '-t delphipraxis.net';
  ShExecInfo.nShow := SW_SHOW;
Brauchst Du denn überhaupt eine Konsole als "Zwischenwirt"?
Dein Vorschlag funktioniert prinzipiell, TerminateProcess beendet den Prozess wie gewünscht. Allerdings ist dann die Umleitung der Ausgabe in eine Datei nicht möglich.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#10

AW: ShellExecuteEx + TerminateProcess

  Alt 22. Apr 2021, 17:06
Wieso nicht?
Delphi-Quellcode:
ShExecInfo.cbSize := SizeOf(ShellExecuteInfo);
ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.lpVerb := 'open';
ShExecInfo.lpFile := 'ping.exe';
ShExecInfo.lpParameters := '-t delphipraxis.net > c:\temp\datei_in_die_umgeleitet_werden.soll';
ShExecInfo.nShow := SW_SHOW;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 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