首页 > 解决方案 > 内存映射文件是否支持 uwp 应用程序和 win32 进程之间的 ipc

问题描述

官方文档没有正确说明 ipc via memory-mapped-files 在 uwp 中是否受支持。我正在研究 uwp 应用程序与其桌面扩展之间的 ipc 方案。System.IO.MemoryMappedFiles虽然我可以使用具有功能的 uwp 应用程序创建内存映射文件,codeGeneration但从 win32 进程打开失败并显示消息Unable to find the specified file.。uwp是否支持通过内存映射文件进行ipc,如果是,正确的方法是什么?

最小的可复制样本。

更新 1

更新了来自@Peter Torr - MSFT 的示例实施答案。

更新 2

win32 进程可以读取从 uwp 应用程序创建的内存映射文件的工作示例。在由 win32 进程创建的 uwp 应用程序中读取内存映射文件仍然无法正常工作。

标签: c#windowsuwpipcmemory-mapped-files

解决方案


是的,它受支持,但如果您在 UWP 上下文中创建对象并从桌面上下文中打开它,则桌面进程需要显式使用命名对象的命名空间。

在 UWP 进程中,调用GetAppContainerNamedObjectPath(nullptr, nullptr, ...)以确定该命名空间是什么,然后在末尾添加反斜杠和映射的文件名。它会像AppContainerNamedObjects\S-1-15-2-xxxxxxx\YourMappedName

你应该只需要这样做一次,除非你改变你的包名(包括发布者哈希)。所以一旦你生成了它,你可以将值硬编码到你的桌面应用程序中,然后忘记它。

请注意,如果您以相反的方式执行此操作 - 桌面创建对象,而 UWP 打开它 - 那么您无需担心命名空间,但您必须修改访问控制,这比较棘手。


推荐阅读