一般来说,进程与进程间通讯的通会采用以下代码
进程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的第一个参数指定一个合适的权限就行了。
本文探讨了进程间通过Event进行通讯时遇到的权限问题。当其中一个进程为服务时,使用OpenEvent会出现拒绝访问的情况。文章提供了解决方案:通过调整CreateEvent的权限参数来实现跨进程通讯。

1万+

被折叠的 条评论
为什么被折叠?



