Поддерживаются ли файлы с отображением памяти как ip c между приложением uwp и процессом win32 - PullRequest
2 голосов
/ 04 августа 2020

Официальная документация не указывает должным образом, поддерживается ли ip c через файлы с отображением памяти в uwp. Я работал над сценарием для ip c между приложением uwp и его расширением для рабочего стола. Хотя я могу создавать файлы с отображением памяти, используя System.IO.MemoryMappedFiles из приложения uwp с возможностью codeGeneration, но открытие из процесса win32 не выполняется с сообщением Unable to find the specified file.. Поддерживается ли ip c через файлы с отображением памяти в uwp, если да, то как это правильно сделать ??

Минимальный воспроизводимый образец.

Обновление 1

Обновленный образец реализации ответа от @Peter Torr - MSFT.

Обновление 2

Рабочий образец, в котором отображена память Файл, созданный из приложения uwp, может быть прочитан процессом win32. Чтение файла с отображением памяти в приложении uwp, созданном процессом win32, все еще не работает.

1 Ответ

2 голосов
/ 05 августа 2020

Да, он поддерживается, но если вы создаете объект в контексте UWP и открываете его из контекста рабочего стола, то процесс рабочего стола должен явно использовать пространство имен названного объекта.

Изнутри ваш процесс UWP, вызовите GetAppContainerNamedObjectPath(nullptr, nullptr, ...), чтобы определить, что это за пространство имен, а затем добавьте backsla sh и имя вашего сопоставленного файла в конец. Это будет что-то вроде AppContainerNamedObjects\S-1-15-2-xxxxxxx\YourMappedName

Вам нужно будет сделать это только один раз, если вы не измените имя своего пакета (включая издателя ha sh). Итак, как только вы его сгенерировали, вы можете жестко запрограммировать значение в своем настольном приложении и забыть о нем.

Обратите внимание, что если вы сделаете это наоборот - Рабочий стол создает объект, а UWP открывает его - тогда вам не нужно беспокоиться о пространстве имен, но вместо этого вам нужно изменить контроль доступа, что сложнее.

...