Delphi-Quellcode:
uses TLHelp32;
function IsExeRunning(const AExeName: string): boolean;
var
h: THandle;
p: TProcessEntry32;
begin
Result := False;
p.dwSize := SizeOf(p);
h := CreateToolHelp32Snapshot(TH32CS_SnapProcess, 0);
try
Process32First(h, p);
repeat
Result := AnsiUpperCase(AExeName) = AnsiUpperCase(p.szExeFile);
until Result or (not Process32Next(h, p));
finally
CloseHandle(h);
end;
end;
function KillTask(const AExeName: string): boolean;
var
p: TProcessEntry32;
h: THandle;
begin
Result := false;
p.dwSize := SizeOf(p);
h := CreateToolHelp32Snapshot(TH32CS_SnapProcess, 0);
try
if Process32First(h, p) then
repeat
if AnsiLowerCase(p.szExeFile) = AnsiLowerCase(AExeName) then
Result := TerminateProcess(OpenProcess(Process_Terminate,
false,
p.th32ProcessID),
0);
until (not Process32Next(h, p)) or Result;
finally
CloseHandle(h);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
while isexerunning('myProgram.exe') do KillTask('myProgram.exe');
end;
dieser code funktioniert, wenn myProgram.exe mit dem gleichen benutzer angemeldet ist, als der derzeitige windows benutzer.
wenn dieses myProgramm.exe allerdings als service (oder durch einen service0 oder mit administratorrechten gestartet ist, und das Programm, was dieses Peroigramm killen soll auch als Administrrator, passiert nichts, ausser das die auslastung des prozessors auf 100% schiesst.
woran kann das liegen?