Comunicación entre procesos (IPC)Interprocess communication (IPC)

En este tema se explican varias maneras de realizar la comunicación entre procesos (IPC) entre aplicaciones Plataforma universal de Windows (UWP) y aplicaciones Win32.This topic explains various ways to perform interprocess communication (IPC) between Universal Windows Platform (UWP) applications and Win32 applications.

App ServicesApp services

App Services permite a las aplicaciones exponer servicios que aceptan y devuelven bolsas de propiedades de primitivas (ValueSet) en segundo plano.App services enable applications to expose services that accept and return property bags of primitives (ValueSet) in the background. Se pueden pasar objetos enriquecidos si se serializan.Rich objects can be passed if they're serialized.

App Services puede ejecutarse fuera de proceso como una tarea en segundo plano o en proceso dentro de la aplicación en primer plano.App services can run either out of process as a background task, or in process within the foreground application.

Los servicios de aplicaciones se utilizan mejor para compartir pequeñas cantidades de datos en los que no se requiere latencia en tiempo real.App services are best used for sharing small amounts of data where near real-time latency isn't required.

COMCOM

Com es un sistema distribuido orientado a objetos para crear componentes de software binario que pueden interactuar y comunicarse.COM is a distributed object-oriented system for creating binary software components that can interact and communicate. Como desarrollador, puede usar COM para crear componentes de software reutilizables y capas de automatización para una aplicación.As a developer, you use COM to create reusable software components and automation layers for an application. Los componentes COM pueden estar en proceso o fuera de proceso y pueden comunicarse a través de un modelo de cliente y servidor .COM components can be in process or out of process, and they can communicate via a client and server model. Los servidores COM fuera de proceso se han utilizado durante mucho tiempo como medio para la comunicación entre objetos.Out-of-process COM servers have long been used as a means for inter-object communication.

Las aplicaciones empaquetadas con la funcionalidad runFullTrust pueden registrar servidores com fuera de proceso para IPC mediante el manifiesto del paquete.Packaged applications with the runFullTrust capability can register out-of-process COM servers for IPC via the package manifest. Esto se conoce como com empaquetado.This is known as Packaged COM.

Sistema de archivosFilesystem

BroadFileSystemAccessBroadFileSystemAccess

Las aplicaciones empaquetadas pueden realizar IPC con el sistema de archivos amplio mediante la declaración de la capacidad restringida de broadFileSystemAccess .Packaged applications can perform IPC using the broad filesystem by declaring the broadFileSystemAccess restricted capability. Esta funcionalidad concede a las API de Windows. Storage y a las API de xxxFromApp Win32 acceso a un sistema de archivos amplio.This capability grants Windows.Storage APIs and xxxFromApp Win32 APIs access to the broad filesystem.

De forma predeterminada, IPC a través del sistema de archivos para aplicaciones empaquetadas está restringido a los otros mecanismos descritos en esta sección.By default, IPC via the filesystem for packaged applications is restricted to the other mechanisms described in this section.

PublisherCacheFolderPublisherCacheFolder

PublisherCacheFolder permite a las aplicaciones empaquetadas declarar carpetas en su manifiesto que se pueden compartir con otros paquetes del mismo publicador.The PublisherCacheFolder enables packaged applications to declare folders in their manifest that can be shared with other packages by the same publisher.

La carpeta de almacenamiento compartido tiene los siguientes requisitos y restricciones:The shared storage folder has the following requirements and restrictions:

  • No se realiza una copia de seguridad ni se mueven los datos de la carpeta de almacenamiento compartido.Data in the shared storage folder is not backed up or roamed.
  • El usuario puede borrar el contenido de la carpeta de almacenamiento compartido.The user can clear the contents of the shared storage folder.
  • No puede utilizar la carpeta de almacenamiento compartido para compartir datos entre aplicaciones de distintos publicadores.You can't use the shared storage folder to share data among applications from different publishers.
  • No se puede usar la carpeta de almacenamiento compartido para compartir datos entre distintos usuarios.You can't use the shared storage folder to share data among different users.
  • La carpeta de almacenamiento compartido no tiene administración de versiones.The shared storage folder doesn't have version management.

Si publica varias aplicaciones y está buscando un mecanismo sencillo para compartir datos entre ellas, el PublisherCacheFolder es una opción simple basada en el sistema de archivos.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.

SharedAccessStorageManagerSharedAccessStorageManager

SharedAccessStorageManager se usa junto con App Services, las activaciones de protocolos (por ejemplo, LaunchUriForResultsAsync), etc., para compartir StorageFiles a través de tokens.SharedAccessStorageManager is used in conjunction with App services, protocol activations (for example, LaunchUriForResultsAsync), etc., to share StorageFiles via tokens.

FullTrustProcessLauncherFullTrustProcessLauncher

Con la funcionalidad runFullTrust , las aplicaciones empaquetadas pueden iniciar procesos de plena confianza en el mismo paquete.With the runFullTrust capability, packaged applications can launch full trust processes within the same package.

En el caso de los escenarios en los que las restricciones de paquete son una carga, o cuando faltan opciones IPC, una aplicación podría usar un proceso de plena confianza como proxy para interactuar con el sistema y, a continuación, IPC con el propio proceso de plena confianza a través de App Services o algún otro mecanismo de IPC compatible.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

LaunchUriForResultsAsync se usa para el intercambio de datos simple (ValueSet) con otras aplicaciones empaquetadas que implementan el contrato de activación ProtocolForResults .LaunchUriForResultsAsync is used for simple (ValueSet) data exchange with other packaged applications that implement the ProtocolForResults activation contract. A diferencia de App Services, que normalmente se ejecutan en segundo plano, la aplicación de destino se inicia en primer plano.Unlike App services, which typically run in the background, the target application is launched in the foreground.

Los archivos se pueden compartir pasando tokens de SharedStorageAccessManager a la aplicación a través de la ValueSet.Files can be shared by passing SharedStorageAccessManager tokens to the application via the ValueSet.

Bucle invertidoLoopback

Bucle invertido es el proceso de comunicación con un servidor de red que escucha en localhost (la dirección de bucle invertido).Loopback is the process of communicating with a network server listening on localhost (the loopback address).

Para mantener la seguridad y el aislamiento de red, las conexiones de bucle invertido para IPC están bloqueadas de forma predeterminada para las aplicaciones empaquetadas.To maintain security and network isolation, loopback connections for IPC are blocked by default for packaged applications. Puede habilitar las conexiones de bucle invertido entre la aplicación empaquetada de confianza mediante las funcionalidades y las propiedades del manifiesto.You can enable loopback connections among trusted packaged application using capabilities and manifest properties.

  • Todas las aplicaciones empaquetadas que participan en conexiones de bucle invertido deberán declarar la privateNetworkClientServer funcionalidad en sus manifiestos de paquete.All packaged applications participating in loopback connections will need to declare the privateNetworkClientServer capability in their package manifests.
  • Dos aplicaciones empaquetadas pueden comunicarse a través de bucle invertido declarando LoopbackAccessRules dentro de sus manifiestos de paquete.Two packaged applications can communicate via loopback by declaring LoopbackAccessRules within their package manifests.
    • Cada aplicación debe mostrar la otra en su LoopbackAccessRules.Each application must list the other in its LoopbackAccessRules. El cliente declara una regla de "salida" para el servidor y el servidor declara las reglas "en" para sus clientes compatibles.The client declares an "out" Rule for the server, and the server declares "in" Rules for its supported clients.

Nota

El nombre de familia de paquete necesario para identificar una aplicación en estas reglas puede encontrarse en el editor de manifiestos de paquete de Visual Studio durante el tiempo de desarrollo, a través del centro de Partners para aplicaciones publicadas a través del Microsoft Store o mediante el comando de PowerShell Get-AppxPackage para las aplicaciones que ya están instaladas.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.

Las aplicaciones y los servicios sin empaquetar no tienen una identidad de paquete, por lo que no se pueden declarar en LoopbackAccessRules.Unpackaged applications and services don't have package identity, so they can't be declared in LoopbackAccessRules. Puede configurar una aplicación empaquetada para que se conecte a través de bucle invertido con aplicaciones y servicios sin empaquetar a través de CheckNetIsolation.exe, pero esto solo es posible para escenarios de transferencia de prueba o depuración en los que tiene acceso local a la máquina y tiene privilegios de administrador.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.

  • Todas las aplicaciones empaquetadas que participan en conexiones de bucle invertido deben declarar la privateNetworkClientServer funcionalidad en sus manifiestos de paquete.All packaged applications participating in loopback connections need to declare the privateNetworkClientServer capability in their package manifests.
  • Si una aplicación empaquetada se conecta a una aplicación o un servicio no empaquetado, ejecute CheckNetIsolation.exe LoopbackExempt -a -n=<PACKAGEFAMILYNAME> para agregar una exención de bucle invertido para la aplicación empaquetada.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.
  • Si una aplicación o un servicio sin empaquetar se está conectando a una aplicación empaquetada, ejecute CheckNetIsolation.exe LoopbackExempt -is -n=<PACKAGEFAMILYNAME> para permitir que la aplicación empaquetada reciba conexiones de bucle invertido entrantes.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 se debe ejecutar continuamente mientras la aplicación empaquetada esté escuchando conexiones.CheckNetIsolation.exe must be running continuously while the packaged application is listening for connections.
    • La -is marca se presentó en Windows 10, versión 1607 (10,0; Compilación 14393).The -is flag was introduced in Windows 10, version 1607 (10.0; Build 14393).

Nota

El nombre de familia de paquete necesario para la -n marca de CheckNetIsolation.exe se puede encontrar a través del editor de manifiestos de paquete de Visual Studio durante el tiempo de desarrollo, a través del centro de Partners para las aplicaciones publicadas a través del Microsoft Store, o mediante el comando de PowerShell Get-AppxPackage para las aplicaciones que ya están instaladas.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 también es útil para depurar problemas de aislamiento de red.CheckNetIsolation.exe is also useful for debugging network isolation issues.

CanalizacionesPipes

Las canalizaciones permiten una comunicación simple entre un servidor de canalización y uno o más clientes de canalización.Pipes enable simple communication between a pipe server and one or more pipe clients.

Las canalizaciones anónimas y con nombre se admiten con las siguientes restricciones:Anonymous pipes and named pipes are supported with the following constraints:

  • De forma predeterminada, las canalizaciones con nombre en aplicaciones empaquetadas solo se admiten entre procesos dentro del mismo paquete, a menos que un proceso sea de plena confianza.By default, named pipes in packaged applications are supported only between processes within the same package, unless a process is full trust.
  • Las canalizaciones con nombre pueden compartirse entre paquetes siguiendo las instrucciones para compartir objetos con nombre.Named pipes can be shared across packages following the guidelines for sharing named objects.
  • Las canalizaciones con nombre en aplicaciones empaquetadas deben utilizar la sintaxis del \\.\pipe\LOCAL\ nombre de la canalización.Named pipes in packaged applications must use the syntax \\.\pipe\LOCAL\ for the pipe name.

RegistroRegistry

Por lo general, no se recomienda el uso del registro para IPC, pero se admite para el código existente.Registry usage for IPC is generally discouraged, but it is supported for existing code. Las aplicaciones empaquetadas solo pueden tener acceso a las claves del registro para las que tienen permiso de acceso.Packaged applications can access only registry keys that they have permission to access.

Las aplicaciones de escritorio empaquetadas como MSIX aprovechan la virtualización del registro , de modo que las escrituras globales del registro están contenidas en un subárbol privado en el paquete MSIX.Desktop applications packaged as MSIX leverage registry virtualization such that global registry writes are contained to a private hive within the MSIX package. Esto permite la compatibilidad del código fuente a la vez que se reduce el impacto global del registro y se puede usar para IPC entre procesos en el mismo paquete.This enables source code compatibility while minimizing global registry impact, and can be used for IPC between processes in the same package. Si debe utilizar el registro, se prefiere este modelo frente a la manipulación del registro global.If you must use the registry, this model is preferred versus manipulating the global registry.

RPCRPC

RPC se puede usar para conectar una aplicación empaquetada a un punto de conexión RPC de Win32, siempre que la aplicación empaquetada tenga las capacidades correctas para que coincidan con las ACL del extremo de 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.

Las funciones personalizadas permiten a los fabricantes de equipos originales y IHV definir capacidades arbitrarias, ACL sus extremos RPCy, a continuación, conceder esas capacidades a aplicaciones cliente autorizadas.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. Para obtener una aplicación de ejemplo completa, vea el ejemplo CustomCapability .For a full sample application, see the CustomCapability sample.

Los extremos de RPC también se pueden agregan a aplicaciones empaquetadas específicas para limitar el acceso al punto de conexión solo a esas aplicaciones sin necesidad de la sobrecarga de administración de funcionalidades personalizadas.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. Puede usar la API DeriveAppContainerSidFromAppContainerName para derivar un SID de un nombre de familia de paquete y, a continuación, la ACL del punto de conexión RPC con el SID, tal como se muestra en el ejemplo CustomCapability .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.

Memoria compartidaShared Memory

La asignación de archivos se puede usar para compartir un archivo o memoria entre dos o más procesos con las siguientes restricciones:File mapping can be used to share a file or memory between two or more processes with the following constraints:

  • De forma predeterminada, las asignaciones de archivos en aplicaciones empaquetadas solo se admiten entre procesos dentro del mismo paquete, a menos que un proceso sea de plena confianza.By default, file mappings in packaged applications are supported only between processes within the same package, unless a process is full trust.
  • Las asignaciones de archivos se pueden compartir entre paquetes siguiendo las instrucciones para compartir objetos con nombre.File mappings can be shared across packages following the guidelines for sharing named objects.

Se recomienda la memoria compartida para compartir y manipular grandes cantidades de datos de forma eficaz.Shared memory is recommended for efficiently sharing and manipulating large amounts of data.