Process liste med bruger
I forbindelse med et program der kører på både Citrix og terminal server, er der opstået et problem.Når programmet starter skal det chekke om andre instanser af sig selv kører og lukke dem. Det virker fint på enkelt bruger systemer.
Men på Terminal server vil det prøve at lukke de andre brugeres programmer, med en fejl til følge - fordi jeg ønsker at gøre brugeren opmærksom at en instance (som er hans egen) ikke svarer mere.
Hvordan tester jeg om det er en process som er brugerens egen, eller tilhører en anden bruger?
procedure killMe;
var
bContinue: BOOL;
Ret: BOOL;
Ph: THandle;
sh: THandle;
pe: TProcessEntry32;
n: string;
myID: Dword;
begin
sh:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe.dwSize:=SizeOf(pe);
bContinue:=Process32First(sh, pe);
n:=AnsiLowerCase(ExtractFileName(Application.ExeName));
GetWindowThreadProcessID(Application.Handle, @myID);
while Integer(bContinue) <> 0 do begin
if AnsiLowerCase(pe.szExeFile) = n then begin
if myID<>pe.th32ProcessID then begin
Ph:=OpenProcess(1, BOOL(0), pe.th32ProcessID);
Ret:=TerminateProcess(Ph, 0);
if false then //er blevet nød til at false testen ud ellers brokker den sig over at den ikke kan stoppe andre brugeres processer.
if not ret then begin
MessageDlg('Could not terminate the running process, contact the system administrator.', mtError, [mbok],0)
halt;
end;
end;
end;
bContinue:=Process32Next(sh, pe);
end;
CloseHandle(sh);
end; //kill me
