Entwickler-Ecke

Windows API - Gleichnamige Prozesse beenden


schelle - Sa 05.03.05 20:16
Titel: Gleichnamige Prozesse beenden
Hallo zusammen

Ich habe folgendes Problem. Bei mir läuft ein lokaler Apache und der startet zwei gleichnamige Prozesse. Also zwei mal Apache exe im Task-Manager. Jetzt hab ich mir ein kleines Programm gebaut um Apache auf Knopfdruck wieder zu beenden. Geht auch nur mit dem Nachteil das man den Knopf zweimal drücken muss um beide Apaches auszuschalten. Ich benutze folgende Funktion die ich mit einem Button aufrufe.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
uses
   ShellAPI, TLHelp32;

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;


Wie krieg ich die dazu beide Apaches zu beenden oder muss die Funktion anders aussehen?

Gruß, Schelle

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconTino: Topic aus Sonstiges verschoben am Mo 07.03.2005 um 01:25


wulfskin - Sa 05.03.05 20:21

Auch wenn es bei deinem Problem nicht weiterhilft: Bei meinem Apache Server war ein SysTray-Programm dabei, mit dem man die einzelnen Services starten/beenden kann. Vielleicht neue Software installieren?


schelle - Sa 05.03.05 21:56

Hi

Ja klar. ApacheMonitor. Hab ich schon auch. Aber ich möchte Apache, Mysql usw über eine eigene Oberfläche bzw ein eigenes Programm starten und beenden. Ein bissle aus Bequemlichkeit..... Und außerdem muss das doch irgendwie hinzukriegen sein.

Mein Aufruf für die Funktion ist übrigens


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button2Click(Sender: TObject);
begin
  if not KillTask('apache.exe'then
    Showmessage('Prozess konnte nicht beendet werden.');
end;


Habs schon mit allen Arten von Schleifen probiert aber irgendwie geht nix.

Schelle

Moderiert von user profile iconAXMD: Code- durch Delphi-Tags ersetzt.


schelle - So 06.03.05 10:12
Titel: Oh man...
Hat sich erledigt. War wohl zu dämlich....

Nu gehts. Trotzdem Danke