c# - 内存映射文件是否支持 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 应用程序中读取内存映射文件仍然无法正常工作。
解决方案
是的,它受支持,但如果您在 UWP 上下文中创建对象并从桌面上下文中打开它,则桌面进程需要显式使用命名对象的命名空间。
在 UWP 进程中,调用GetAppContainerNamedObjectPath(nullptr, nullptr, ...)
以确定该命名空间是什么,然后在末尾添加反斜杠和映射的文件名。它会像AppContainerNamedObjects\S-1-15-2-xxxxxxx\YourMappedName
你应该只需要这样做一次,除非你改变你的包名(包括发布者哈希)。所以一旦你生成了它,你可以将值硬编码到你的桌面应用程序中,然后忘记它。
请注意,如果您以相反的方式执行此操作 - 桌面创建对象,而 UWP 打开它 - 那么您无需担心命名空间,但您必须修改访问控制,这比较棘手。
推荐阅读
- javascript - 如何使用 FlatList 在 react-native 中渲染异构数据?
- postman - 如何动态设置 Postman 环境变量键
- oop - 如何在 Haskell 中使用类型类以及与 java 接口的区别
- ibm-cloud - ibm_platform_services/global_search api 的一次响应中最多可以返回多少条记录
- sql-server - 如何防止用户(拥有 db_datawriter)能够通过管理工作室进行连接?
- python - discord webhook ip 抓取器
- jquery - 禁用 if...else 上的按钮
- python - IBM Cloud 中的自定义映像创建间歇性超时
- sql - 通过将三个表与 Temp 表组合来更新查询
- python - 当 scipy.ndimage.zoom 使用 order 1 和 order 3 时,输出中引入了什么区别?