AGB  ·  Datenschutz  ·  Impressum  







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

Wie kann ich eine fremde Exe beenden

Ein Thema von SaFu · begonnen am 3. Aug 2007 · letzter Beitrag vom 4. Aug 2007
Antwort Antwort
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#1

Wie kann ich eine fremde Exe beenden

  Alt 3. Aug 2007, 17:12
hab schon nach geguckt

aber so richtig nichts gefunden habt ihr vielleicht ein paar links
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Wie kann ich eine fremde Exe beenden

  Alt 3. Aug 2007, 17:16
Jo, Link
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Wie kann ich eine fremde Exe beenden

  Alt 3. Aug 2007, 17:34
Danke war genau das was ich gesucht habe funktioniert ganz gut
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Wie kann ich eine fremde Exe beenden

  Alt 3. Aug 2007, 23:06
Die Lösung ist schlecht. Und zwar wegen dieser Zeile:
Result := TerminateProcess(OpenProcess(Process_Terminate, False, Prozess.th32ProcessID), 0); MSDN-Library durchsuchenTerminateProcess kehrt nämlich sofort zurück und der Rückgabewert signalisiert nur, ob die Funktion korrekt ausgeführt wurde oder nicht. Aber nicht, ob der Prozess auch wirklich terminiert wurde. Eine saubere Lösung könnte so aussehen:
Delphi-Quellcode:
{*
*  Procedure : KillProcess
*  Author    : Michael Puff
*  Date      : 2006-09-15
*  Terminates a process identified by its PID
*}

function KillProcess(dwProcID, Wait: DWORD): Integer;
var
  hProcess : Cardinal;
  dw : DWORD;
begin
  // open the process and store the process-handle
  hProcess := OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, False, dwProcID);
  // kill it
  if hProcess <> 0 then
  begin
    dw := Integer(TerminateProcess(hProcess, 1));
    if dw <> 0 then
    begin
      // TerminateProcess returns immediately, so we have to verify the result via
      // WaitForSingleObject
      dw := WaitForSingleObject(hProcess, Wait);
      if dw = WAIT_FAILED then
        dw := GetLastError;
    end
    else // TerminateProcess = 0
      dw := GetLastError;
    CloseHandle(hProcess);
  end
  else // hProcess = INVALID_HANDLE_VALUE
    dw := GetLastError;
  result := dw;
end;
Allerdinsg sollte man es möglichst vermeiden eonen Prozess so zu beenden. Dnn geöffnete DLLs, werden so nicht entladen bzw. deren Referenzzähler wird nicht dekrementiert. Besser ist es an das Hauptfenster eine WM_CLOSE Nachricht zu schicken.

Edit: Mein 23.000stes Posting.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Wie kann ich eine fremde Exe beenden

  Alt 3. Aug 2007, 23:09
Zitat von Luckie:
[...]

Edit: Mein 23.000stes Posting.


Glückwunsch

SCRaT
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Wie kann ich eine fremde Exe beenden

  Alt 4. Aug 2007, 19:22
Erstamal auch glückwunsch von mir

hab aber trotzdem mal noch fragen

Wie rufe ich dann diese funktion auf

Zitat:
function KillProcess(dwProcID, Wait: DWORD): Integer;
bei dem obigen beispiel also bei der lösung ist es ja so
  KillProcess('vncviewer.exe'); und Wie mache ich das mit dem WM_CLOSE wenn das besser ist

gruss sascha und danke nochmal für die antworten
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:27 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