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

Posted

技术标签:

【中文标题】boost::Windows 服务和用户应用程序之间的进程间【英文标题】:boost::interprocess between Windows service and user application 【发布时间】:2009-01-28 18:59:28 【问题描述】:

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

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

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

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

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

非常感谢,

网卡


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

【问题讨论】:

您好,我正在处理一个非常相似的问题,我非常感谢您对这个主题进行更多详细说明,因为我对 boost::interprocess 完全陌生并且找不到任何用途网络中 managed_windows_shared_memory 的示例。谢谢。编辑:我在 windows vista 下工作。 【参考方案1】:

这是可行的:

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

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

网卡

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于boost::Windows 服务和用户应用程序之间的进程间的主要内容,如果未能解决你的问题,请参考以下文章

如何在c ++代码块窗口中使用boost 1.63库?

SharePoint服务器端对象模型 之 访问用户用户组和权限(Part 3)

Mosquitto 高级应用之用户配置

svn 服务器端使用之权限管理

(Tomcat)服务器之web应用的虚拟目录映射和主机搭建

Android学习羁绊之Service