Einzelnen Beitrag anzeigen

Benutzerbild von Alien426
Alien426

Registriert seit: 21. Dez 2005
146 Beiträge
 
Turbo Delphi für Win32
 
#1

Prozess sanft beenden (ohne Fenster)

  Alt 29. Aug 2010, 17:15
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 Apache Webserver auf einem USB-Stick. Bisher startete ich ihn per Batch-Skript (start "Apache" http.exe -w) und konnte dann im Konsolen-Fenster einfach [Strg]+[C] drücken und er wurde beendet.

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 (httpd.exe -k stop), was ich aber nicht machen möchte, da er ja auf einem Stick laufen und auf dem "Gastsystem" nicht ungezogen sein soll.
  Mit Zitat antworten Zitat