我正在 Vista 上创建一个应用程序,其中包括一个服务和一个控制台应用程序。两者都在同一个用户帐户中运行
在服务中,我正在创建一个事件并等待该事件。在控制台应用程序中,我正在打开相同的事件(问题从这里开始)并调用SetEvent函数。我无法在控制台应用程序中打开事件(出现错误 5,访问被拒绝)。我在网上搜索并看到了一些关于完整性级别的内容(我不确定问题与完整性级别有关)。它告诉那个服务并且应用程序具有不同的完整性级别。
这是代码的一部分,发生IPC
服务
DWORD
WINAPI IpcThread(LPVOID lpParam)
{
HANDLE ghRequestEvent = NULL ;
ghRequestEvent = CreateEvent(NULL, FALSE,
FALSE, "Global\\Event1") ; //creating the event
if(NULL == ghRequestEvent)
{
//error
}
while(1)
{
WaitForSingleObject(ghRequestEvent, INFINITE) //waiting for the event
//here some action related to event
}
}
控制台应用程序
在应用程序中,打开事件并设置事件
unsigned int
event_notification()
{
HANDLE ghRequestEvent = NULL ;
ghRequestEvent = OpenEvent(SYNCHRONIZE|EVENT_MODIFY_STATE, FALSE, "Global\\Event1") ;
if(NULL == ghRequestEvent)
{
//error
}
SetEvent(ghRequestEvent) ;
}
我正在以管理权限运行两个应用程序(服务和控制台应用程序)(我以管理员身份登录并通过右键单击并使用“以管理员身份运行”选项运行控制台应用程序)。
我在控制台应用程序(我在其中打开事件)中遇到的错误是错误号 5(拒绝访问。)。
因此,如果您告诉如何在 Vista 中的服务和应用程序之间进行 IPC,将会非常有帮助
提前致谢
纳瓦尼思