c# - 内存映射文件是否支持 uwp 应用程序和 win32 进程之间的 ipc

标签 c# windows uwp ipc memory-mapped-files

官方文档没有正确说明 ipc via memory-mapped-files 在 uwp 中是否受支持。我正在研究 uwp 应用程序与其桌面扩展之间的 ipc 方案。虽然我可以使用 System.IO.MemoryMappedFiles 创建内存映射文件来自带有 codeGeneration 的 uwp 应用程序功能,但从 win32 进程打开失败并显示消息 Unable to find the specified file. . uwp是否支持通过内存映射文件进行ipc,如果是,正确的方法是什么?
Minimal reproduceable sample.
更新 1
Updated sample implementing answer from @Peter Torr - MSFT.
更新 2
Working sample in which memory-mapped-file created from uwp app can be read by win32 process.在由 win32 进程创建的 uwp 应用程序中读取内存映射文件仍然无法正常工作。

最佳答案

是的,它受支持,但如果您在 UWP 上下文中创建对象并从桌面上下文中打开它,则桌面进程需要显式使用命名对象的命名空间。
在您的 UWP 进程中,调用 GetAppContainerNamedObjectPath(nullptr, nullptr, ...) 确定该命名空间是什么,然后在末尾添加一个反斜杠和您的映射文件名。类似于 AppContainerNamedObjects\S-1-15-2-xxxxxxx\YourMappedName你应该只需要这样做一次,除非你改变你的包名(包括发布者哈希)。所以一旦你生成了它,你可以将值硬编码到你的桌面应用程序中,然后忘记它。
请注意,如果您以相反的方式执行此操作 - 桌面创建对象,而 UWP 打开它 - 那么您无需担心命名空间,但您必须修改访问控制,这比较棘手。

关于c# - 内存映射文件是否支持 uwp 应用程序和 win32 进程之间的 ipc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63247469/

相关文章:

windows - 获取组框边框的系统颜色

windows - 部署我的 UWP 应用程序时出错

C# ASP.NET : how to access cache when no HttpContext. 当前是否可用(为空)?

c# - 测量 C# 代码的可测试性

C# AxWindowsMediaPlayer 循环

windows - 嵌套批处理 for 循环

c# - 枚举 : need to get the name of the enum, 不是它的 int 值,作为一个字符串

Linux 和 Windows 上的 Python sys.maxint、sys.maxunicode

c# - Listview中的ListView-选择子级时未设置父级的SelectedIndex

c# - 获取 Window.Current.Content 的参数