Межпроцессное взаимодействие (IPC)Interprocess communication (IPC)

В этом разделе объясняются различные способы выполнения межпроцессного взаимодействия (IPC) между приложениями универсальная платформа Windows (UWP) и приложениями Win32.This topic explains various ways to perform interprocess communication (IPC) between Universal Windows Platform (UWP) applications and Win32 applications.

Услуги для приложенийApp services

Службы приложений позволяют приложениям предоставлять службы, которые принимают и возвращают контейнеры свойств примитивов (наборзначений) в фоновом режиме.App services enable applications to expose services that accept and return property bags of primitives (ValueSet) in the background. Объекты с широкими возможностями могут передаваться при сериализации.Rich objects can be passed if they're serialized.

Службы приложений могут выполнять как фоновые задачи , так и процессы в рамках приложения переднего плана.App services can run either out of process as a background task, or in process within the foreground application.

Службы приложений лучше использовать для совместного использования небольших объемов данных, где задержка почти в реальном времени не требуется.App services are best used for sharing small amounts of data where near real-time latency isn't required.

COMCOM

Com — это распределенная объектно-ориентированная система для создания двоичных программных компонентов, которые могут взаимодействовать и взаимодействовать.COM is a distributed object-oriented system for creating binary software components that can interact and communicate. Как разработчик вы используете COM для создания многократно используемых программных компонентов и слоев автоматизации для приложения.As a developer, you use COM to create reusable software components and automation layers for an application. COM-компоненты могут быть в процессе или вне процесса и могут взаимодействовать через клиентскую и серверную модель.COM components can be in process or out of process, and they can communicate via a client and server model. Необработанные серверы COM долго использовались в качестве средства для обмена данными между объектами.Out-of-process COM servers have long been used as a means for inter-object communication.

Упакованные приложения с возможностью рунфуллтруст могут регистрировать необработанные COM-серверы для IPC с помощью манифеста пакета.Packaged applications with the runFullTrust capability can register out-of-process COM servers for IPC via the package manifest. Это называется упакованным com.This is known as Packaged COM.

Файловая системаFilesystem

броадфилесистемакцессBroadFileSystemAccess

Упакованные приложения могут выполнять IPC, используя обширную файловую систему, объявляя возможность ограничения броадфилесистемакцесс .Packaged applications can perform IPC using the broad filesystem by declaring the broadFileSystemAccess restricted capability. Эта возможность предоставляет интерфейсам Windows. Storage API и API ксксксфромапп Win32 доступ к широкой файловой системе.This capability grants Windows.Storage APIs and xxxFromApp Win32 APIs access to the broad filesystem.

По умолчанию IPC через файловую систему для упакованных приложений ограничена другими механизмами, описанными в этом разделе.By default, IPC via the filesystem for packaged applications is restricted to the other mechanisms described in this section.

публишеркачефолдерPublisherCacheFolder

Публишеркачефолдер позволяет упакованным приложениям объявлять папки в своем манифесте, которые могут использоваться совместно с другими пакетами одним и тем же издателем.The PublisherCacheFolder enables packaged applications to declare folders in their manifest that can be shared with other packages by the same publisher.

Папка общего хранилища имеет следующие требования и ограничения.The shared storage folder has the following requirements and restrictions:

  • Данные в папке общего хранилища не архивируются и не перемещаются.Data in the shared storage folder is not backed up or roamed.
  • Пользователь может очистить содержимое папки общего хранилища.The user can clear the contents of the shared storage folder.
  • Нельзя использовать папку общего хранилища для обмена данными между приложениями разных издателей.You can't use the shared storage folder to share data among applications from different publishers.
  • Нельзя использовать папку общего хранилища для обмена данными между разными пользователями.You can't use the shared storage folder to share data among different users.
  • В папке общего хранилища нет управления версиями.The shared storage folder doesn't have version management.

Если вы публикуете несколько приложений и ищете простой механизм обмена данными между ними, Публишеркачефолдер является простым параметром на основе файловой системы.If you publish multiple applications and you're looking for a simple mechanism to share data between them, then the PublisherCacheFolder is a simple filesystem-based option.

шаредакцесссторажеманажерSharedAccessStorageManager

Шаредакцесссторажеманажер используется совместно со службами приложений, активацией протоколов (например, лаунчурифорресултсасинк) и т. д., чтобы совместно использовать сторажефилес через маркеры.SharedAccessStorageManager is used in conjunction with App services, protocol activations (for example, LaunchUriForResultsAsync), etc., to share StorageFiles via tokens.

фуллтрустпроцесслаунчерFullTrustProcessLauncher

Благодаря возможности рунфуллтруст Упакованные приложения могут запускать процессы с полным доверием в одном пакете.With the runFullTrust capability, packaged applications can launch full trust processes within the same package.

В сценариях, где ограничения пакета являются косвенными, или отсутствуют параметры IPC, приложение может использовать процесс полного доверия в качестве прокси-сервера для взаимодействия с системой, а затем IPC с полным уровнем доверия через службы приложений или другой хорошо поддерживаемый механизм IPC.For scenarios where package restrictions are a burden, or IPC options are lacking, an application could use a full trust process as a proxy to interface with the system, and then IPC with the full trust process itself via App services or some other well supported IPC mechanism.

LaunchUriForResultsAsyncLaunchUriForResultsAsync

Лаунчурифорресултсасинк используется для простого обмена даннымиValueSetс другими упакованными приложениями, реализующими контракт активации протоколфорресултс .LaunchUriForResultsAsync is used for simple (ValueSet) data exchange with other packaged applications that implement the ProtocolForResults activation contract. В отличие от служб приложений, которые обычно выполняются в фоновом режиме, целевое приложение запускается на переднем плане.Unlike App services, which typically run in the background, the target application is launched in the foreground.

Для совместного использования файлов можно передавать маркеры шаредсторажеакцессманажер в приложение через его значение.Files can be shared by passing SharedStorageAccessManager tokens to the application via the ValueSet.

Замыкание на себяLoopback

Замыкание на себя — это процесс связи с сетевым сервером, который прослушивает localhost (адрес замыкания на себя).Loopback is the process of communicating with a network server listening on localhost (the loopback address).

Для обеспечения безопасности и сетевой изоляции подключения по обратной связи для IPC по умолчанию блокируются для упакованных приложений.To maintain security and network isolation, loopback connections for IPC are blocked by default for packaged applications. Можно включить замыкание соединений между доверенным упакованным приложением с помощью возможностей и свойств манифеста.You can enable loopback connections among trusted packaged application using capabilities and manifest properties.

  • Все Упакованные приложения, участвующие в подключениях замыкания на себя, должны объявлять privateNetworkClientServer возможности в манифестах пакетов.All packaged applications participating in loopback connections will need to declare the privateNetworkClientServer capability in their package manifests.
  • Два упакованных приложения могут обмениваться данными через замыкание на себя, объявляя лупбаккакцессрулес в манифестах пакетов.Two packaged applications can communicate via loopback by declaring LoopbackAccessRules within their package manifests.
    • Каждое приложение должно перечислить в лупбаккакцессрулес.Each application must list the other in its LoopbackAccessRules. Клиент объявляет правило "out" для сервера, а сервер объявляет правила "in" для поддерживаемых клиентов.The client declares an "out" Rule for the server, and the server declares "in" Rules for its supported clients.

Примечание

Имя семейства пакетов, необходимое для распознавания приложения в этих правилах, можно найти с помощью редактора манифеста пакета в Visual Studio во время разработки, в центре партнеров для приложений, опубликованных с помощью Microsoft Store, или с помощью команды PowerShell Get-AppxPackage для уже установленных приложений.The package family name required to identify an application in these Rules can be found via the package manifest editor in Visual Studio during development time, via Partner Center for applications published through the Microsoft Store, or via the Get-AppxPackage PowerShell command for applications that are already installed.

Неупакованные приложения и службы не имеют удостоверения пакета, поэтому их нельзя объявлять в лупбаккакцессрулес.Unpackaged applications and services don't have package identity, so they can't be declared in LoopbackAccessRules. Вы можете настроить упакованное приложение для подключения через замыкание с помощью неупакованных приложений и служб с помощью CheckNetIsolation.exe, однако это возможно только в сценариях загружать неопубликованные или отладки, где у вас есть локальный доступ к компьютеру и у вас есть права администратора.You can configure a packaged application to connect via loopback with unpackaged applications and services via CheckNetIsolation.exe, however this is only possible for sideload or debugging scenarios where you have local access to the machine, and you have administrator privileges.

  • Все Упакованные приложения, участвующие в подключениях замыкания на себя, должны объявлять privateNetworkClientServer возможности в манифестах пакетов.All packaged applications participating in loopback connections need to declare the privateNetworkClientServer capability in their package manifests.
  • Если упакованное приложение подключается к неупакованному приложению или службе, выполните команду, CheckNetIsolation.exe LoopbackExempt -a -n=<PACKAGEFAMILYNAME> чтобы добавить исключение замыкания на себя для упакованного приложения.If a packaged application is connecting to an unpackaged application or service, run CheckNetIsolation.exe LoopbackExempt -a -n=<PACKAGEFAMILYNAME> to add a loopback exemption for the packaged application.
  • Если неупакованное приложение или служба подключается к упакованному приложению, выполните команду, CheckNetIsolation.exe LoopbackExempt -is -n=<PACKAGEFAMILYNAME> чтобы позволить упакованному приложению принимать входящие подключения с замыканием на себя.If an unpackaged application or service is connecting to a packaged application, run CheckNetIsolation.exe LoopbackExempt -is -n=<PACKAGEFAMILYNAME> to enable the packaged application to receive inbound loopback connections.
    • CheckNetIsolation.exe должны выполняться постоянно, пока упакованное приложение прослушивает подключения.CheckNetIsolation.exe must be running continuously while the packaged application is listening for connections.
    • Этот -is флаг появился в Windows 10 версии 1607 (10,0; Сборка 14393).The -is flag was introduced in Windows 10, version 1607 (10.0; Build 14393).

Примечание

Имя семейства пакетов, необходимое для -n флага CheckNetIsolation.exe , можно найти с помощью редактора манифеста пакета в Visual Studio во время разработки, через Центр партнеров для приложений, опубликованных с помощью Microsoft Store, или с помощью команды PowerShell Get-AppxPackage для уже установленных приложений.The package family name required for the -n flag of CheckNetIsolation.exe can be found via the package manifest editor in Visual Studio during development time, via Partner Center for applications published through the Microsoft Store, or via the Get-AppxPackage PowerShell command for applications that are already installed.

CheckNetIsolation.exe также полезна при отладке проблем сетевой изоляции.CheckNetIsolation.exe is also useful for debugging network isolation issues.

КаналыPipes

Каналы обеспечивают простое взаимодействие между сервером канала и одним или несколькими клиентами канала.Pipes enable simple communication between a pipe server and one or more pipe clients.

Анонимные каналы и именованные каналы поддерживают следующие ограничения:Anonymous pipes and named pipes are supported with the following constraints:

  • По умолчанию именованные каналы в упакованных приложениях поддерживаются только между процессами в одном пакете, если только процесс не имеет полного доверия.By default, named pipes in packaged applications are supported only between processes within the same package, unless a process is full trust.
  • Именованные каналы можно совместно использовать в пакетах, следуя рекомендациям по предоставлению общего доступа к именованным объектам.Named pipes can be shared across packages following the guidelines for sharing named objects.
  • Именованные каналы в упакованных приложениях должны использовать синтаксис \\.\pipe\LOCAL\ для имени канала.Named pipes in packaged applications must use the syntax \\.\pipe\LOCAL\ for the pipe name.

РеестрRegistry

Использование реестра для IPC, как правило, не рекомендуется, но поддерживается для существующего кода.Registry usage for IPC is generally discouraged, but it is supported for existing code. Упакованные приложения имеют доступ только к тем разделам реестра, для доступа к которым у них есть разрешение.Packaged applications can access only registry keys that they have permission to access.

Классические приложения, Упакованные в MSIX, используют виртуализацию реестра , так что глобальные записи реестра содержатся в частном кусте в пакете MSIX.Desktop applications packaged as MSIX leverage registry virtualization such that global registry writes are contained to a private hive within the MSIX package. Это обеспечивает совместимость исходного кода при минимизации влияния на глобальные реестры и может использоваться для IPC между процессами в одном пакете.This enables source code compatibility while minimizing global registry impact, and can be used for IPC between processes in the same package. Если необходимо использовать реестр, то эта модель является предпочтительной, а управление глобальным реестром — с помощью.If you must use the registry, this model is preferred versus manipulating the global registry.

RPCRPC

RPC можно использовать для подключения упакованного приложения к КОНЕЧНОЙ точке RPC Win32 при условии, что Пакетное приложение имеет правильные возможности для сопоставления ACL в КОНЕЧНОЙ точке RPC.RPC can be used to connect a packaged application to a Win32 RPC endpoint, provided that the packaged application has the correct capabilities to match the ACLs on the RPC endpoint.

Пользовательские возможности позволяют производителям оборудования и независимым поставщикам программно определять произвольные возможности, предоставлять им конечные точки RPC, а затем предоставить эти возможности полномочным клиентским приложениям.Custom capabilities enable OEMs and IHVs to define arbitrary capabilities, ACL their RPC endpoints with them, and then grant those capabilities to authorized client applications. Полный пример приложения см. в примере кустомкапабилити .For a full sample application, see the CustomCapability sample.

Конечные точки RPC также могут быть доступен для конкретных упакованных приложений, чтобы ограничить доступ к конечной точке только этими приложениями без необходимости управления дополнительными возможностями.RPC endpoints can also be ACLed to specific packaged applications to limit access to the endpoint to just those applications without requiring the management overhead of custom capabilities. Вы можете использовать API деривеаппконтаинерсидфромаппконтаинернаме для получения идентификатора безопасности из имени семейства пакетов, а затем в списке ACL КОНЕЧНОЙ точки RPC с ИД безопасности, как показано в примере кустомкапабилити .You can use the DeriveAppContainerSidFromAppContainerName API to derive a SID from a package family name, and then ACL the RPC endpoint with the SID as shown in the CustomCapability sample.

Общая памятьShared Memory

Сопоставление файлов можно использовать для совместного использования файла или памяти между двумя или более процессами со следующими ограничениями:File mapping can be used to share a file or memory between two or more processes with the following constraints:

  • По умолчанию сопоставления файлов в упакованных приложениях поддерживаются только между процессами в одном пакете, если только процесс не имеет полного доверия.By default, file mappings in packaged applications are supported only between processes within the same package, unless a process is full trust.
  • Сопоставления файлов можно совместно использовать в пакетах, следуя рекомендациям по предоставлению общего доступа к именованным объектам.File mappings can be shared across packages following the guidelines for sharing named objects.

Для эффективного совместного использования больших объемов данных и управления ими рекомендуется использовать общую память.Shared memory is recommended for efficiently sharing and manipulating large amounts of data.