Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Wie kann ich eine fremde Exe beenden (https://www.delphipraxis.net/97056-wie-kann-ich-eine-fremde-exe-beenden.html)

SaFu 3. Aug 2007 17:12


Wie kann ich eine fremde Exe beenden
 
hab schon nach geguckt

aber so richtig nichts gefunden habt ihr vielleicht ein paar links

DeddyH 3. Aug 2007 17:16

Re: Wie kann ich eine fremde Exe beenden
 
Jo, Link

SaFu 3. Aug 2007 17:34

Re: Wie kann ich eine fremde Exe beenden
 
Danke war genau das was ich gesucht habe funktioniert ganz gut

Luckie 3. Aug 2007 23:06

Re: Wie kann ich eine fremde Exe beenden
 
Die Lösung ist schlecht. Und zwar wegen dieser Zeile:
Delphi-Quellcode:
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. :firejump: :mrgreen:

scrat1979 3. Aug 2007 23:09

Re: Wie kann ich eine fremde Exe beenden
 
Zitat:

Zitat von Luckie
[...]

Edit: Mein 23.000stes Posting. :firejump: :mrgreen:

:party: :party: :party:

Glückwunsch :hello:

SCRaT

SaFu 4. Aug 2007 19:22

Re: Wie kann ich eine fremde Exe beenden
 
Erstamal auch glückwunsch von mir :party: :party:

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
Delphi-Quellcode:
  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


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:56 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