Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Prozess killen (https://www.delphipraxis.net/109895-prozess-killen.html)

Andreas L. 9. Mär 2008 20:13


Prozess killen
 
Abend,

mit folgenden Code möchte ich einen Prozess beenden:

Delphi-Quellcode:
   

function KillProcess(const ExeName: String): Boolean;
var
  Process: TProcessEntry32;
  h: THandle;
begin
  Result := False;
  Process.dwSize := SizeOf(Process);
  h := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  try
   if Process32First(h, Process) then
    repeat
     if AnsiLowerCase(Process.szExeFile) = AnsiLowerCase(ExeName) then Result := TerminateProcess(OpenProcess(Process_Terminate, False, Process.th32ProcessID), 0);
    until (not Process32Next(h, Process)) or Result;
  finally
   CloseHandle(h);
  end;
end;

//Aufruf:
KillProcess(IncludeTrailingPathDelimiter(GetShellFolder(CSIDL_PROGRAM_FILES)) + 'Windows Sidebar\sidebar.exe');
Es passiert aber nichts, die Anwendung wird nicht beendet. Was mache ich falsch?

Neutral General 9. Mär 2008 20:15

Re: Prozess killen
 
Hi,

Ich glaube du musst den Exenamen ohne den Pfad angeben:

Delphi-Quellcode:
KillProcess('sidebar.exe');
Gruß
Neutral General

Apollonius 9. Mär 2008 20:17

Re: Prozess killen
 
Woher stammt dieser Code? Ich bin immer noch der Meinung, dass man Handles nach Benutzung wieder schließen sollte.

Die Muhkuh 9. Mär 2008 20:17

Re: Prozess killen
 
Du musst nur den ExeNamen übergeben und nicht den Pfad zur Exe.

Die Muhkuh 9. Mär 2008 20:18

Re: Prozess killen
 
Zitat:

Zitat von Apollonius
Woher stammt dieser Code? Ich bin immer noch der Meinung, dass man Handles nach Benutzung wieder schließen sollte.

Das Handle wird im Finally-Block per CloseHandle wieder geschlossen.

Apollonius 9. Mär 2008 20:18

Re: Prozess killen
 
Ich meinte das Prozess-Handle.

Luckie 10. Mär 2008 08:18

Re: Prozess killen
 
Zitat:

Zitat von Andreas L.
Es passiert aber nichts, die Anwendung wird nicht beendet. Was mache ich falsch?

Du musst deine Hausaufgaben machen. Die Funktion gibt doch schon einen Wahrheitswert zurück, der sagt, ob es geklappt hat oder nicht. Hat es nicht geklappt, gibt die Funktion False zurück, dann wäre es bestimmt keine schlechte Idee mit MSDN-Library durchsuchenGetLastError zu gucken, warum die Funktion fehlgeschlagen ist.


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