官方文档未正确说明uwp中是否支持通过内存映射文件进行ipc。我正在研究uwp应用与其桌面扩展之间的ipc方案。虽然我可以使用具有System.IO.MemoryMappedFiles
功能的uwp应用程序中的codeGeneration
创建内存映射文件,但是从Win32进程打开失败并显示消息Unable to find the specified file.
。 ipc是否通过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上下文中创建对象并从Desktop上下文中打开它,则Desktop进程需要显式使用命名对象的 namespace 。
在您的UWP流程中,调用 GetAppContainerNamedObjectPath(nullptr, nullptr, ...)
以确定该 namespace 是什么,然后在末尾添加反斜杠和映射的文件名。就像AppContainerNamedObjects\S-1-15-2-xxxxxxx\YourMappedName
除非更改包名称(包括发布者哈希),否则您只需要这样做一次。因此,一旦生成它,就可以将值硬编码到桌面应用程序中,而不必理会它。
请注意,如果以相反的方式进行操作-桌面创建对象,然后UWP打开它-那么您不必担心 namespace ,但是必须修改访问控制,这比较麻烦。
关于c# - 是否支持uwp应用程序和Win32进程之间的IPC内存映射文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63247469/