![]() |
Prozess sanft beenden (ohne Fenster)
Bevor ich zum Thema komme, kurz eine Rechtfertigung. Ich weiss, dass es dieses Thema schon in der einen oder anderen Form gibt. Ich denke, dass es trotzdem seine Daseinsberechtigung hat.
Kurze Einführung: Ich habe den ![]() Jetzt schreibe ich ein kleines Programm in Delphi, das am Ende als Icon in der TNA sitzen und per Kontextmenü den Apache starten und beenden soll. Zur Zeit führe ich Apache mit ShellExecuteEx() aus, was mir den Prozess-Handle liefert. Den kann ich dann in TerminateProcess() benutzen, um zu beenden. Das gefällt mir aber nicht sehr, da 1. der Apache einen Kindprozess startet, der damit nicht beendet wird 2. der Apache nicht sauber beendet wird (Error-Log: "Unclean shutdown of previous Apache run?") Den ersten Punkt könnte man wohl erledigen, indem man die laufenden Prozesse nach der Exe durchsucht und auch diese abschießt. Lieber wäre mir aber eine Lösung, die einfacher und zuverlässiger ist und auch den zweiten Punkt erledigt. Zum Beispiel WM_CLOSE zu senden. Aber das geht ja nicht ohne Fenster. Apache-seitig kann ich nur was ausrichten, wenn er als Dienst installiert ist ( ![]() |
AW: Prozess sanft beenden (ohne Fenster)
Kann man den Apache nicht auch via Batch beenden?
Du kannst ja mal im WAMP schauen, wie die das machen. |
AW: Prozess sanft beenden (ohne Fenster)
Auf
![]() Zitat:
|
AW: Prozess sanft beenden (ohne Fenster)
Für Programme die so etwas nicht unterstützen kann man mit PostThreadMessage die entsprechende Quit-Message in die Messagequeue des Threads absetzen.
|
AW: Prozess sanft beenden (ohne Fenster)
Zitat:
![]() Den Source zur XAMPP Control Panel Application kann man ![]() Zitat:
Zitat:
Sir Thornberry, danke für den Tipp. Das werde ich ausprobieren. Tatsächlich hatte ich auf der Seite von ![]() |
AW: Prozess sanft beenden (ohne Fenster)
Ja, Tschuldschung, früher hieß die Windows-Variante mal WAMP (für Linux LAMP). :oops:
Im Root-Verzeichnis von XAMP liegen auch einige Batchdateien. Zitat:
Zitat:
Delphi-Quellcode:
.
apache\bin\httpd.exe
stoppen:
Delphi-Quellcode:
.
apache\bin\pv -f -k httpd.exe -q
vielleicht reicht auch
Delphi-Quellcode:
zum Stoppen
apache\bin\httpd.exe -q
|
AW: Prozess sanft beenden (ohne Fenster)
Zitat:
|
AW: Prozess sanft beenden (ohne Fenster)
Zitat:
EDIT: Kannst du mir auf die Sprünge helfen, wie ich an einen/den Thread des Prozesses ran komme? |
AW: Prozess sanft beenden (ohne Fenster)
Wenn ich Apache verwende starte ich ihn ganz einfach über:
Code:
Da nach ist das Konsolenfenster wieder verfügbar und Apache läuft im Hintergrund.
httpd -k start
Zum Beenden benutze ich einfach:
Code:
Sonst weiß ich nicht was dein Problem ist. :stupid:
httpd -k stop
|
AW: Prozess sanft beenden (ohne Fenster)
Zitat:
Apache läuft auf USB-Stick und nicht als Service. Du könntest übrigens auch einfach mit "net start apache2.2" starten. (Statt apache2.2 kann der Dienst auch mit anderem Namen registriert sein.) |
AW: Prozess sanft beenden (ohne Fenster)
Man kann doch apache auch das Ctrl+Break Signal schicken, oder?
![]() Ich habe es nicht testen können. |
AW: Prozess sanft beenden (ohne Fenster)
Zitat:
Habe von ShellExecuteEx() zu CreateProcess() gewechselt und verschiedene Varianten von CreationFlags ausprobiert (auch mit/ohne CREATE_NO_WINDOW, um die Konsole zu unterdrücken; CREATE_NEW_PROCESS_GROUP verhindert ![]() Die ProzessID für den Aufruf von GenerateConsoleCtrlEvent() habe ich übrigens mit dem Process Explorer von Microsoft/Sysinternals abgeglichen. Die stimmt. |
AW: Prozess sanft beenden (ohne Fenster)
Zitat:
Das Senden von WM_CLOSE / WM_QUIT an den Thread ist erfolgreich. Es geschieht aber nichts. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 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