如何禁止多用户帐号下同一个程序在本机多次执行? ( 积分: 100 )

  • 主题发起人 主题发起人 南宫吹云
  • 开始时间 开始时间

南宫吹云

Unregistered / Unconfirmed
GUEST, unregistred user!
虽然可以用以下办法限制:
function CreateMutex : Boolean;
var
AppTitle : PChar;
begin
AppTitle := StrAlloc(100);
StrPCopy(AppTitle, '程序名称');
Result := True;
Mutex := Windows.CreateMutex(nil, False, AppTitle);
if (GetLastError = ERROR_ALREADY_EXISTS) or (Mutex = 0) then
begin
Result := False;
if Mutex <> 0 then
Mutex := 0;
end;
StrDispose(AppTitle);
end;
但发现只在同一个用户下有效,如果此机器登录多个用户是没办法禁止的。
多用户帐号不知道如何限制?
 
要跨用户通讯,普通的方法不行
窗口,互斥对象,信号量等东东都是属于用户的(实际属于用户的某一桌面,即使一个用户,也可以有多个Desktop,各Desktop的对象独立)

只要是对于整个计算机唯一的对象都能达到你的要求
可以用的有TCP/UDP,管道,内存映射文件等
 
多谢ysai,是否可以判断任务进程(列出多个用户的进程,任务管理器可以做到)出现多个**.exe,即阻止程序执行?
 
改名运行呢?
如果有个应用程序与你的应用同名呢?
 
嗯,这确实不是好办法,多谢你的提醒,我再试试其他方法。
 
绑定一个端口就行了
 
EnumProcess获取进程的可执行文件名,当与本程序相同时退出就是了。
 
ysai, 说的不错,方法很多,只要可以唯一标志就可以管道呀什么的都可以处理
 
多人接受答案了。
 

Similar threads

后退
顶部