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
Antwort Antwort
Seite 1 von 2  1 2      
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
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Einen Prozess "anständig" beenden.

  Alt 22. Jan 2008, 14:02
Bau doch etwas ein, dass du die Andere APP beenden kannst. eine Message, die du schickst, ein MMF, dass du veränderst, sockets....
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
gibb

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

Re: Einen Prozess "anständig" beenden.

  Alt 22. Jan 2008, 14:20
Joa dacht ich auch schon daran aber was ist ein MMF ? das blöde ist die andere Applikation ist ne Java applikation und die höhrt die ganze zeit den Bluetooth Stack ab und gibt die Empfangenen Daten meiner Applikation über den Konsolenoutput weiter...
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Einen Prozess "anständig" beenden.

  Alt 22. Jan 2008, 14:31
MMF = Memory Mapped File

Sind hier im Forum viele Infos und auch Beispiele zu zu finden
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Einen Prozess "anständig" beenden.

  Alt 22. Jan 2008, 14:33
Musst ja nicht MMF nehmen. Wahrscheinlich geht auch ein GlobalAtom... Was halt Java so hergibt. Da fehlen mir die Erfahrungen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
gibb

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

Re: Einen Prozess "anständig" beenden.

  Alt 22. Jan 2008, 14:36
joa das ist auch mein problem. Java gibt da fast nix her da es inner sandbox leuft. Es ist schon verdammt schwer handels auszulesen mit java. oder Tastenevents direkt an ein handle resp. programm zu senden.

aber meine frage war das geht von aussen nicht direkt da muss ich in der Java applikation drauf reagieren ? weil das wollte ich eben wenn möglich verhindern...

Java ist auch nicht so mein ding. hätte das teil einen destructor hätte ich einige probleme nicht -.-'
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Einen Prozess "anständig" beenden.

  Alt 22. Jan 2008, 14:45
Von aussen kannst du nur mit TerminateProcess sicher beenden.
Das Senden einer WM_close Message o.ä. funktioniert macnhmal, aber auch nur, wenn die Programm darauf reagieren. Und wenn deins in einer Endlosschleife hängt, sieht es schlecht aus.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
gibb

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

Re: Einen Prozess "anständig" beenden.

  Alt 22. Jan 2008, 15:00
schade aber auch :-/ danke jedenfalls werde mich mal noch auf der Java seite schlau machen... wie würde ich den ein VM_Close senden ? ganz normales postmessage ?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Einen Prozess "anständig" beenden.

  Alt 22. Jan 2008, 15:07
Zitat von gibb:
schade aber auch :-/ danke jedenfalls werde mich mal noch auf der Java seite schlau machen... wie würde ich den ein VM_Close senden ? ganz normales postmessage ?
Ja.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
gibb

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

Re: Einen Prozess "anständig" beenden.

  Alt 22. Jan 2008, 15:13
wir testen gerade die wm_close methode ^-^' wenn das geht lieb ich euch alle ^^ entlich kein windows an und abmelden mehr... und ansonsten muss ich mich halt mit mmf und globelatom auseinandersetzen wobei ich lieber mmf benützen würde...

lg sev
  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 05:03 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