4

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

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

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

也许我没有将它用于我的特定目的的好方法。

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

非常感谢,

网卡


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

4

2 回答 2

4

这是可行的:

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

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

网卡

于 2009-01-29T13:53:25.033 回答
1

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

于 2009-11-05T06:51:03.810 回答