AGB  ·  Datenschutz  ·  Impressum  







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

Einen Prozess "anständig" beenden.

Ein Thema von gibb · begonnen am 22. Jan 2008 · letzter Beitrag vom 22. Jan 2008
 
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#1

Einen Prozess "anständig" beenden.

  Alt 22. Jan 2008, 13:49
Hallo zusammen,
Also ich habe mit einem Freund eine applikation geschrieben eigentlich 2. eine Java applikation welche sich in einer endlosschleife befindet bis ich sie beende. Nun habe ich sie immer mit folgender Funktion beendet:

Delphi-Quellcode:
function TForm1.TerminateProcessesByFilename(const Filename: string;
  out Found, Terminated: Cardinal; UsePath: Boolean = False): Boolean;
var
  Module: string;
  ProcessSnapshot: THandle;
  ProcessEntry32: TProcessEntry32;
  ModuleSnapshot: THandle;
  ModuleEntry32: TModuleEntry32;
  ModuleFound: Boolean;
  ProcessHandle: THandle;
begin
{Sucht einen Laufenden Prozess anhand des Exenamens. Dieser Exe name ist in unserem Fall der name
des BMServer weil dieser Prozess ansonsten eigenständig weiterleuft. Auch könnte sie bei erweiterungen
dazu benutzt werden um zum beispiel Winamp oder PowerDVD zu beenden.
Alle Prozesse die Anhand des Exe Namens gefunden werden werden Terminiert
}

  Module := LowerCase(Filename);
  if not UsePath then
    Module := ExtractFileName(Filename);
  Result := True;
  Found := 0;
  Terminated := 0;
  ProcessSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if (ProcessSnapshot <> 0) and
    (ProcessSnapshot <> INVALID_HANDLE_VALUE) then
  try
    FillChar(ProcessEntry32, SizeOf(TProcessEntry32), 0);
    ProcessEntry32.dwSize := SizeOf(TProcessEntry32);
    if Process32First(ProcessSnapshot, ProcessEntry32) then
      repeat
        ModuleSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,
          ProcessEntry32.th32ProcessID);
        if (ModuleSnapshot <> INVALID_HANDLE_VALUE) then
        try
          FillChar(ModuleEntry32, SizeOf(TModuleEntry32), 0);
          ModuleEntry32.dwSize := SizeOf(TModuleEntry32);
          if Module32First(ModuleSnapshot, ModuleEntry32) then
          begin
            if UsePath then
              ModuleFound := (LowerCase(ModuleEntry32.szExePath) = Module)
            else
              ModuleFound := (LowerCase(ModuleEntry32.szModule) = Module);
            if ModuleFound then
            begin
              Inc(Found);
              // Öffnen des Prozesses
              ProcessHandle := OpenProcess(PROCESS_TERMINATE, False,
                ProcessEntry32.th32ProcessID);
              if (ProcessHandle <> 0) then
              try
                // Beenden des Prozesses
                if TerminateProcess(ProcessHandle, 0) then
                  Inc(Terminated)
                else
                  Result := False;
              finally
                CloseHandle(ProcessHandle);
              end
              else
                Result := False;
            end;
          end;
        finally
          CloseHandle(ModuleSnapshot);
        end;
      until not Process32Next(ProcessSnapshot, ProcessEntry32);
  finally
    CloseHandle(ProcessSnapshot);
  end;
end;
Nun ist aber das Problem das die beendete applikation wenn ich sie so beende nicht mehr funktioniert. Wenn ich aber diese applikation nicht mit meiner software beende sondern einfach aleinstehend betreibe und anschliessend über das kreuz oder mit alt+f4 beende geht das.

Also dacht ich mir sendest dem Prozess einfach alt+f4 und fertig is ^^' aber nix war mit fertig der prozess wurde dann einfach nicht mehr beendet.

Kennt jemand eine Möglichkeit "normal" zu sagen das er beendet wurde ohne ihn gleich abzuschiessen ?

lg Sev

Anmerkung: das Programm wird bei mir in der Applikation in einer Konsole gestartet und dort betrieben schliesse ich die konsole bleibt der Prozess bestehen und ich muss den Prozess manuell beenden.
  Mit Zitat antworten Zitat
 


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 04:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz