GetLastError看看啥问题,

解决方案 »

  1.   

    GetLastError()=5ACCESS_DENIED  !
      

  2.   

    参考这个朋友说的:
    http://topic.csdn.net/t/20040331/10/2907426.html在服务程序中CreateEvent,当LPSECURITY_ATTRIBUTES这个参数传NULL的时候,将使用默认访问控制。     
      服务程序中的默认控制就是不允许桌面程序访问这些对象,所以服务中打开的Event,桌面无法打开,GetLastError()的值为5(ERROR_ACCESS_DENIED) 返回访问拒绝服务中创建的内核对象要想在普通应用程序中使用,必须指定安全描述符。这是delphi的写的测试代码:在Service中...
        SecurityAttribute.nLength:=   sizeof(SecurityAttribute);
        SecurityAttribute.lpSecurityDescriptor   :=   @SecurityDescriptor;
        SecurityAttribute.bInheritHandle   :=   TRUE;
        InitializeSecurityDescriptor(@SecurityDescriptor,1);
        SetSecurityDescriptorDacl(@SecurityDescriptor,TRUE,Nil,FALSE);    hEvent := CreateEvent(
            @SecurityAttribute,         // default security attributes
            true,         // manual-reset event
            False,         // initial state is signaled
            'myTestEvent'  // object name
            );     
     ....在应用程序中,则这样写
        
       hEvent := CreateEvent(
            nil,          // default security attributes
            true,         // manual-reset event
            False,         // initial state is signaled
            'Global\myTestEvent'  // object name
            );
       ...
      

  3.   

    当然在应用层,使用OpenEvent也可以  hEvent := OpenEvent(
            EVENT_MODIFY_STATE,
            True,
            'Global\myTestEvent'
            );...