在Windows服务中创建的共享内存,在其它exe程序中不能打开。请帮忙解决,多谢!

解决方案 »

  1.   

    如果系统是VISTA,那就很正常。
    因为VISTA改了些东东。刚好会影响服务与用户进程间的通信。
    如果不是,贴代码。
      

  2.   

    代码如下:
    服务和其它exe都调用如下的函数,exe先运行,双方能够通过共享内存交互信息,但如果服务先运行,则在exe侧报告共享内存打开失败。
    HANDLE OpenShareMemory()
    {
    HANDLE hShareFile;//内存映射句柄 //打开共享内存映射
    hShareFile=OpenFileMapping( FILE_MAP_READ|FILE_MAP_WRITE,
    FALSE,SHAREMEMORYNAME);
    if(hShareFile == NULL)
    {
    hShareFile = CreateFileMapping( INVALID_HANDLE_VALUE,
    NULL, PAGE_EXECUTE_READWRITE, 0, sizeof(MapStruct), SHAREMEMORYNAME);
    }
    return hShareFile;
    }
      

  3.   

    请问这段代码时客户程序的还是服务的?
    vista下由于有session的问题,如果createservice传递的安全性参数是NULL让系统使用默认值的话会无法正常运行的。但是据说管道还是可行的。这两天正在被vista折磨,2000,Server2003,XP都正常的在vista下就是无法运行,唉~