2009-01-28 22 views
4

我正在使用boost :: interprocess在两个应用程序之间进行通信。当这两个应用程序由同一用户启动时,它工作得很好。boost :: interprocess Windows服务和用户应用程序之间

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

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

也许我没有用它来达到我特殊目的的好方法。

有没有人有线索如何解决我的问题?

非常感谢,

尼克


编辑: 我试图用 “managed_mapped_file”。我的问题是,win32实现调用“CreateFileMapping”而不指定对象的名称。在我的特例中,我想我需要指定类似“Global \ MyMappedFile”这样的应用程序和服务都可以查看映射的文件。

+0

你好,我正在处理一个非常类似的问题,我真的很感谢在这个问题上稍微详细一点,因为我是全新的boost :: interprocess,并且找不到任何managed_windows_shared_memory使用示例网页。谢谢。 编辑:我正在windows vista下工作。 – 2011-02-21 14:02:09

回答

4

下面是一些作品:

  • 我使用 “的boost ::进程间:: managed_windows_shared_memory
  • 我段的名称是 “全球\ MySharedMemory”
  • 我有以处理应用程序启动和服务未启动的情况。这是因为即使我的应用程序可以对共享内存拥有读/写访问权限,它也无法创建它。只有服务可以。 (事实上​​,应用程序可以当且仅当用户运行它有一个特殊的特权SeCreateGlobalPrivilege

也许有人可以找到一个更好的办法;-)

尼克

1

它的东西关于窗口站和ACL。您需要修改源以使其在Windows服务和用户应用程序之间运行。在vista和win7中使用 ,在winsta0使用服务,但在winsta1使用应用程序。所以你需要用正确的DACL给LPSECURITY_ATTRIBUTES。

相关问题