Межпроцессное взаимодействие (IPC)
В этом разделе описаны различные способы взаимодействия между приложениями универсальная платформа Windows (UWP) и приложениями Win32.
Услуги для приложений
Службы приложений позволяют приложениям предоставлять службы, принимаюющие и возвращающие пакеты свойств примитивов (ValueSet) в фоновом режиме. Расширенные объекты можно передавать, если они сериализуются.
Службы приложений могут не выполняться как фоновая задача или в процессе в приложении переднего плана.
Службы приложений лучше всего используются для совместного использования небольших объемов данных, в которых не требуется задержка в режиме реального времени.
COM
COM — это распределенная объектно-ориентированная система для создания двоичных компонентов программного обеспечения, которые могут взаимодействовать и взаимодействовать. Разработчик использует COM для создания повторно используемых компонентов программного обеспечения и уровней автоматизации для приложения. Компоненты COM могут находиться в процессе или вне процесса, и они могут взаимодействовать с помощью клиентской и серверной модели. Внепроцессные COM-серверы уже давно используются в качестве средства для обмена данными между объектами.
Упакованные приложения с возможностью runFullTrust могут регистрировать серверы COM вне процесса для IPC через манифест пакета. Это называется packaged COM.
Файловая система
BroadFileSystemAccess
Упакованные приложения могут выполнять IPC с помощью широкой файловой системы, объявляя ограниченную функцию broadFileSystemAccess . Эта возможность предоставляет API-интерфейсы Windows.Storage и api xxxFromApp Win32 к широкой файловой системе.
По умолчанию IPC через файловую систему для упакованных приложений ограничен другими механизмами, описанными в этом разделе.
PublisherCacheFolder
PublisherCacheFolder позволяет упакованным приложениям объявлять папки в манифесте, к которым можно предоставить общий доступ другим пакетам того же издателя.
Общая папка хранилища имеет следующие требования и ограничения:
- Данные в общей папке хранилища не резервируются или перемещаются.
- Пользователь может очистить содержимое общей папки хранилища.
- Общую папку хранилища нельзя использовать для совместного использования данных между приложениями из разных издателей.
- Вы не можете использовать общую папку хранилища для совместного использования данных между разными пользователями.
- В общей папке хранилища нет управления версиями.
Если вы публикуете несколько приложений и ищете простой механизм для обмена данными между ними, то PublisherCacheFolder — это простой вариант на основе файловой системы.
SharedAccessStorageManager
SharedAccessStorageManager используется в сочетании со службами приложений, активациями протокола (например, LaunchUriForResultsAsync) и т. д., чтобы предоставить общий доступ к StorageFiles через токены.
FullTrustProcessLauncher
Благодаря возможности runFullTrust упакованные приложения могут запускать процессы полного доверия в одном пакете.
В сценариях, когда ограничения пакетов являются бременем или отсутствуют варианты IPC, приложение может использовать процесс полного доверия в качестве прокси-сервера для взаимодействия с системой, а затем IPC с процессом полного доверия через службы приложений или другой хорошо поддерживаемый механизм IPC.
LaunchUriForResultsAsync
LaunchUriForResultsAsync используется для простого обмена данными (ValueSet) с другими упакованными приложениями, реализующими контракт активации ProtocolForResults . В отличие от служб приложений, которые обычно выполняются в фоновом режиме, целевое приложение запускается на переднем плане.
Файлы можно совместно использовать, передав маркеры SharedStorageAccessManager приложению через ValueSet.
Замыкание на себя
Loopback — это процесс взаимодействия с сетевым сервером, прослушивающим localhost (адрес обратного цикла).
Для обеспечения безопасности и сетевой изоляции подключения обратного цикла для IPC по умолчанию блокируются для упакованных приложений. Вы можете включить подключения обратного цикла между доверенным упакованным приложением с помощью возможностей и свойств манифеста.
- Все упакованные приложения, участвующие в соединениях с циклом, должны объявить
privateNetworkClientServer
возможность в манифестах пакета. - Два упакованных приложения могут взаимодействовать через loopback, объявив LoopbackAccessRules в манифестах пакета.
Примечание.
Имя семейства пакетов, необходимое для идентификации приложения в этих правилах, можно найти с помощью редактора манифеста пакета в Visual Studio во время разработки, через Центр партнеров для приложений, опубликованных через Microsoft Store, или с помощью команды Get-AppxPackage PowerShell для уже установленных приложений.
Непакованные приложения и службы не имеют удостоверения пакета, поэтому их нельзя объявить в LoopbackAccessRules. Вы можете настроить упакованое приложение для подключения через цикл обратной передачи с распакованными приложениями и службами с помощью CheckNetIsolation.exe, однако это возможно только для неопубликованных или отладки сценариев, где у вас есть локальный доступ к компьютеру, и у вас есть права администратора.
- Все упакованные приложения, участвующие в соединениях с циклом, должны объявить
privateNetworkClientServer
возможность в манифестах пакета. - Если упакованое приложение подключается к распаковке приложения или службы, выполните команду
CheckNetIsolation.exe LoopbackExempt -a -n=<PACKAGEFAMILYNAME>
, чтобы добавить исключение обратного цикла для упаковаемого приложения. - Если распаковка приложения или службы подключается к упаковаированному приложению, выполните команду
CheckNetIsolation.exe LoopbackExempt -is -n=<PACKAGEFAMILYNAME>
, чтобы разрешить пакетированному приложению получать входящие подключения к циклу.
Примечание.
Имя семейства пакетов, необходимое для -n
флага CheckNetIsolation.exe, можно найти с помощью редактора манифеста пакета в Visual Studio во время разработки, через Центр партнеров для приложений, опубликованных через Microsoft Store, или с помощью команды Get-AppxPackage PowerShell для уже установленных приложений.
CheckNetIsolation.exe также полезно для отладки проблем сетевой изоляции.
Каналы
Каналы обеспечивают простой обмен данными между сервером канала и одним или несколькими клиентами канала.
Анонимные каналы и именованные каналы поддерживаются со следующими ограничениями:
- По умолчанию именованные каналы в упакованных приложениях поддерживаются только между процессами в одном пакете, если процесс не является полным доверием.
- Именованные каналы можно совместно использовать между пакетами, следуя рекомендациям по совместному использованию именованных объектов.
- Именованные каналы (в упакованных и распакованных приложениях) должны использовать синтаксис
\\.\pipe\LOCAL\
для имени канала.
Реестр
Использование реестра для IPC обычно не рекомендуется, но поддерживается для существующего кода. Упакованные приложения могут получить доступ только к разделам реестра, к которым у них есть разрешение на доступ.
Как правило, упакованные классические приложения (см . статью "Создание пакета MSIX из кода") используют виртуализацию реестра, так что глобальный реестр записывается в частный куст в пакете MSIX. Это обеспечивает совместимость исходного кода при минимизации влияния глобального реестра и может использоваться для IPC между процессами в одном пакете. Если вы должны использовать реестр, эта модель предпочтительна и управляет глобальным реестром.
RPC
RPC можно использовать для подключения упаковаемого приложения к конечной точке RPC Win32, если упаковаемое приложение имеет правильные возможности для сопоставления списков управления доступом на конечной точке RPC.
Пользовательские возможности позволяют OEM и IHV определять произвольные возможности, ACL своих конечных точек RPC с ними, а затем предоставлять эти возможности авторизованным клиентским приложениям. Полный пример приложения см. в примере CustomCapability .
Конечные точки RPC также могут быть acled для определенных упакованных приложений, чтобы ограничить доступ к конечной точке только тем приложениям, не требуя затрат на управление пользовательскими возможностями. Api DeriveAppContainerSidFromAppContainerName можно использовать для получения идентификатора безопасности из имени семейства пакетов, а затем ACL конечной точки RPC с идентификатором безопасности, как показано в примере CustomCapability.
Общая память
Сопоставление файлов можно использовать для совместного использования файла или памяти между двумя или несколькими процессами со следующими ограничениями:
- По умолчанию сопоставления файлов в упакованных приложениях поддерживаются только между процессами в одном пакете, если процесс не является полным доверием.
- Сопоставления файлов можно совместно использовать в пакетах, следуя рекомендациям по совместному использованию именованных объектов.
Общая память рекомендуется эффективно совместно использовать и управлять большими объемами данных.