用Mutex来限制客户端的。大家可能会忘记一个错误号 5,拒绝访问。strMutext.Format(_T("rundll32_application_%d"), nSessionId);
CreateMutex(NULL, FALSE, strMutext);
int nMutex = GetLastError();
//nMutex ==  5拒绝访问
if( nMutex == ERROR_ALREADY_EXISTS || nMutex == 5)
{
return FALSE;
}如果服务起一个Mutex,那客户端去访问这个Mutex就会被拒绝,今天遇到了这个问题。

解决方案 »

  1.   

    呵呵,其实是权限不同,服务创建的Mutex的权限是0x1f0001 (Full control),普通程序创建的是0x100000 (Synchronize),关键是CreateMutex的第一个参数~~,你是直接设置为NULL,你要是自己用ACE系列的函数设置权限,估计还是返回ERROR_ALREADY_EXISTS,话说,亲不觉得把5写成ERROR_ACCESS_DENIED更养眼参考:access control entry