boost::Windows服务和用户应用程序之间的进程间

boost::Windows服务和用户应用程序之间的进程间,boost,windows-services,interprocess,Boost,Windows Services,Interprocess,我使用boost::interprocess在两个应用程序之间进行通信。当两个应用程序由同一用户启动时,效果非常好 当其中一个应用程序是服务时,它会失败 我发现共享媒体实际上是在“TMP”目录中创建的文件。所以它失败了,因为每个应用程序都在自己的“TMP”目录中创建自己的文件 也许我没有用它来达到我的目的 有人知道如何解决我的问题吗 非常感谢 Nic 编辑: 我尝试使用“托管映射文件”。我的问题是win32实现调用“CreateFileMapping”时没有指定对象的名称。在我的特殊情况下,我

我使用boost::interprocess在两个应用程序之间进行通信。当两个应用程序由同一用户启动时,效果非常好

当其中一个应用程序是服务时,它会失败

我发现共享媒体实际上是在“TMP”目录中创建的文件。所以它失败了,因为每个应用程序都在自己的“TMP”目录中创建自己的文件

也许我没有用它来达到我的目的

有人知道如何解决我的问题吗

非常感谢

Nic


编辑
我尝试使用“托管映射文件”。我的问题是win32实现调用“CreateFileMapping”时没有指定对象的名称。在我的特殊情况下,我认为我需要指定类似“Global\MyMappedFile”的内容,以便应用程序和服务都可以查看映射文件。

以下是一些有效的方法:

  • 我正在使用“boost::进程间::托管的\u windows\u共享的\u内存”
  • 我的分区的名称是“Global\MySharedMemory”
  • 我必须处理应用程序启动而服务未启动的情况。这是因为即使我的应用程序可以对共享内存进行读/写访问,它也无法创建共享内存。只有服务可以。(事实上,当且仅当运行该应用程序的用户具有SeCreateGlobalPrivilege特权时,该应用程序才能运行)
也许有人能找到更好的方法;-)


Nic

是关于窗口站和ACL的。您需要修改源以使其在windows服务和用户应用程序之间工作。
在vista和win7中,服务在winsta0上运行,但应用程序在winsta1上运行。因此,您需要为LPSECURITY\u属性提供正确的DACL。

您好,我正在处理一个非常类似的问题,我非常希望对这个主题进行更多的阐述,因为我对boost::interprocess完全陌生,在web上找不到任何托管windows共享内存的使用示例。谢谢编辑:我在WindowsVista下工作。