一般来说,进程与进程间通讯的通会采用以下代码
进程A
HANDLE hevent;
hevent=CreateEvent(NULL, TRUE, FALSE, "myevent");
DWORD dwRtn = WaitForSingleObject(g_hEvent, 60*1000); //等1分钟
if (dwRtn == WAIT_OBJECT_0)
{
DePrintf("get event...");
}
进程B
HANDLE hEvent=OpenEvent(EVENT_MODIFY_STATE,FALSE,"myevent");
SetEvent(hEvent); //给进程A发事件信号
但如果进程A换成系统服务时,进程B的OpenEvent就会返回0,GetLastError()返回5,意思是拒绝访问。
原来在服务中创建的event继续了服务的权限,在进程B中不能用EVENT_MODIFY_STATE打开,只能用
SYNCHRONIZE打开,可是用SYNCHRONIZE打开又不能执行SetEvent。
解决的办法是利用CreateEvent的第一个参数指定一个合适的权限就行了。