Würden denn da nicht die Virenscanner anschlagen?
Bei mir nicht. Ich verwende GDATA Internet Security 2012.
Verwendet habe ich den Code übrigens unter WinXP; ob auch alles unter Win7 ebenso glatt läuft, kann ich gerade nicht überprüfen.
Und hier noch eine leicht verbesserte Funktion Killprocess(), die den Fall berücksichtigt, dass die vom Programm gestartete ExeResource bereits extern beendet worden sein sollte. Das kann durch Abfrage des Exitcodes per GetExitCodeProcess() geklärt werden:
Delphi-Quellcode:
function KillProcess(ProcInfo: TProcessInformation): boolean;
var
process_handle: integer;
errorCode: cardinal;
begin
process_handle := openprocess(PROCESS_ALL_ACCESS, true, ProcInfo.dwProcessId);
result := terminateprocess(process_handle, 0);
if not result then
begin
// prüfen, was los ist
GetExitCodeProcess(process_handle, Errorcode);
// falls der Process bereits extern beendet worden ist,
// dann ist ErrorCode = 0, ansonsten ErrorCode <> 0
result := ErrorCode = 0;
end;
if result then
begin
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;