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

时间:2009-01-28 18:59:29

标签: boost windows-services interprocess

我正在使用boost :: interprocess在两个应用程序之间进行通信。当两个应用程序由同一个用户启动时,它运行良好。

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

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

也许我没有按照我的特定目的使用它。

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

非常感谢,

尼克


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

2 个答案:

答案 0 :(得分:4)

这是有用的:

  • 我正在使用“ boost :: interprocess :: managed_windows_shared_memory
  • 我的部分名称是“Global \ MySharedMemory”
  • 我必须处理启动应用程序而不是服务的情况。这是因为即使我的应用程序可以对共享内存进行读/写访问,也无法创建它。只有服务才可以。 (事实上​​,当且仅当运行它的用户具有特殊权限 SeCreateGlobalPrivilege )时,应用程序才可以

也许有人可以找到更好的方法; - )

尼克

答案 1 :(得分:1)

它是关于Window Stations和ACL的。您需要修改源以使其在Windows服务和用户应用程序之间工作。 在vista和win7中,服务在winsta0运行,但应用程序在winsta1运行。所以你需要给一个带有正确DACL的LPSECURITY_ATTRIBUTES。