Communication interprocessus (IPC)Interprocess communication (IPC)

Cette rubrique décrit les différentes façons d’effectuer des communications interprocessus (IPC) entre des applications plateforme Windows universelle (UWP) et des applications Win32.This topic explains various ways to perform interprocess communication (IPC) between Universal Windows Platform (UWP) applications and Win32 applications.

App ServicesApp services

Les services d’application permettent aux applications d’exposer des services qui acceptent et retournent des conteneurs de propriétés de primitives (ValueSet) en arrière-plan.App services enable applications to expose services that accept and return property bags of primitives (ValueSet) in the background. Les objets enrichis peuvent être passés s’ils sont sérialisés.Rich objects can be passed if they're serialized.

Les services d’application peuvent s’exécuter hors processus en tant que tâche en arrière-plan ou dans le processus au sein de l’application de premier plan.App services can run either out of process as a background task, or in process within the foreground application.

Les services d’application conviennent mieux pour le partage de petites quantités de données lorsque la latence en temps quasi réel n’est pas nécessaire.App services are best used for sharing small amounts of data where near real-time latency isn't required.

COMCOM

Com est un système orienté objet distribué permettant de créer des composants logiciels binaires capables d’interagir et de communiquer.COM is a distributed object-oriented system for creating binary software components that can interact and communicate. En tant que développeur, vous utilisez COM pour créer des composants logiciels réutilisables et des couches d’automatisation pour une application.As a developer, you use COM to create reusable software components and automation layers for an application. Les composants COM peuvent être en cours de traitement ou hors processus, et ils peuvent communiquer via un modèle client et serveur .COM components can be in process or out of process, and they can communicate via a client and server model. Les serveurs COM out-of-process ont longtemps été utilisés pour la communication entre les objets.Out-of-process COM servers have long been used as a means for inter-object communication.

Les applications empaquetées avec la fonctionnalité runFullTrust peuvent inscrire des serveurs com hors processus pour IPC via le manifeste du package.Packaged applications with the runFullTrust capability can register out-of-process COM servers for IPC via the package manifest. C’est ce qu’on appelle com empaqueté.This is known as Packaged COM.

FileSystemFilesystem

BroadFileSystemAccessBroadFileSystemAccess

Les applications empaquetées peuvent exécuter IPC à l’aide du système de fichiers large en déclarant la fonctionnalité restreinte broadFileSystemAccess .Packaged applications can perform IPC using the broad filesystem by declaring the broadFileSystemAccess restricted capability. Cette fonctionnalité accorde aux API Windows. Storage et aux API Win32 xxxFromApp l’accès au système de fichiers large.This capability grants Windows.Storage APIs and xxxFromApp Win32 APIs access to the broad filesystem.

Par défaut, IPC via le système de fichiers pour les applications empaquetées est limité aux autres mécanismes décrits dans cette section.By default, IPC via the filesystem for packaged applications is restricted to the other mechanisms described in this section.

PublisherCacheFolderPublisherCacheFolder

Le PublisherCacheFolder permet aux applications empaquetées de déclarer des dossiers dans leur manifeste qui peuvent être partagés avec d’autres packages par le même serveur de publication.The PublisherCacheFolder enables packaged applications to declare folders in their manifest that can be shared with other packages by the same publisher.

Le dossier de stockage partagé a les exigences et restrictions suivantes :The shared storage folder has the following requirements and restrictions:

  • Les données du dossier de stockage partagé ne sont pas sauvegardées ou itinérantes.Data in the shared storage folder is not backed up or roamed.
  • L’utilisateur peut effacer le contenu du dossier de stockage partagé.The user can clear the contents of the shared storage folder.
  • Vous ne pouvez pas utiliser le dossier de stockage partagé pour partager des données entre des applications provenant de différents serveurs de publication.You can't use the shared storage folder to share data among applications from different publishers.
  • Vous ne pouvez pas utiliser le dossier de stockage partagé pour partager des données entre différents utilisateurs.You can't use the shared storage folder to share data among different users.
  • Le dossier de stockage partagé ne dispose pas de la gestion des versions.The shared storage folder doesn't have version management.

Si vous publiez plusieurs applications et que vous recherchez un mécanisme simple pour partager des données entre elles, PublisherCacheFolder est une option simple basée sur un système de fichiers.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 est utilisé conjointement avec les services d’application, les activations de protocole (par exemple, LaunchUriForResultsAsync), etc., pour partager des StorageFiles via des jetons.SharedAccessStorageManager is used in conjunction with App services, protocol activations (for example, LaunchUriForResultsAsync), etc., to share StorageFiles via tokens.

FullTrustProcessLauncherFullTrustProcessLauncher

Avec la fonctionnalité runFullTrust , les applications empaquetées peuvent lancer des processus de confiance totale dans le même package.With the runFullTrust capability, packaged applications can launch full trust processes within the same package.

Dans les scénarios où les restrictions de package sont fastidieuses, ou si les options IPC manquent, une application peut utiliser un processus de confiance totale en tant que proxy pour interagir avec le système, puis IPC avec le processus de confiance totale par le biais d’app services ou d’un autre mécanisme IPC bien pris en charge.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 est utilisé pour l’échange de données simple (ValueSet) avec d’autres applications empaquetées qui implémentent le contrat d’activation ProtocolForResults .LaunchUriForResultsAsync is used for simple (ValueSet) data exchange with other packaged applications that implement the ProtocolForResults activation contract. Contrairement à app services, qui s’exécute généralement en arrière-plan, l’application cible est lancée au premier plan.Unlike App services, which typically run in the background, the target application is launched in the foreground.

Les fichiers peuvent être partagés en passant des jetons SharedStorageAccessManager à l’application via ValueSet.Files can be shared by passing SharedStorageAccessManager tokens to the application via the ValueSet.

BouclageLoopback

Le bouclage est le processus de communication avec un serveur réseau qui écoute sur localhost (l’adresse de bouclage).Loopback is the process of communicating with a network server listening on localhost (the loopback address).

Pour assurer la sécurité et l’isolement réseau, les connexions de bouclage pour IPC sont bloquées par défaut pour les applications empaquetées.To maintain security and network isolation, loopback connections for IPC are blocked by default for packaged applications. Vous pouvez activer les connexions de bouclage entre les applications empaquetées approuvées à l’aide de fonctionnalités et de Propriétés de manifeste.You can enable loopback connections among trusted packaged application using capabilities and manifest properties.

  • Toutes les applications empaquetées qui participent à des connexions de bouclage doivent déclarer la privateNetworkClientServer fonctionnalité dans leurs manifestes de package.All packaged applications participating in loopback connections will need to declare the privateNetworkClientServer capability in their package manifests.
  • Deux applications empaquetées peuvent communiquer par boucle en déclarant des LoopbackAccessRules dans leurs manifestes de package.Two packaged applications can communicate via loopback by declaring LoopbackAccessRules within their package manifests.
    • Chaque application doit répertorier l’autre dans son LoopbackAccessRules.Each application must list the other in its LoopbackAccessRules. Le client déclare une règle « out » pour le serveur, et le serveur déclare des règles « in » pour ses clients pris en charge.The client declares an "out" Rule for the server, and the server declares "in" Rules for its supported clients.

Notes

Le nom de la famille de packages requis pour identifier une application dans ces règles est disponible via l’éditeur de manifeste de package dans Visual Studio pendant le développement, via l' espace partenaires pour les applications publiées via le Microsoft Store, ou via la commande PowerShell AppxPackage pour les applications déjà installées.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.

Les applications et les services non empaquetés n’ont pas d’identité de package et ne peuvent donc pas être déclarés dans LoopbackAccessRules.Unpackaged applications and services don't have package identity, so they can't be declared in LoopbackAccessRules. Vous pouvez configurer une application empaquetée pour qu’elle se connecte par le biais du bouclage avec des applications et des services non empaquetés via CheckNetIsolation.exe. Toutefois, cela n’est possible que pour les scénarios chargement ou de débogage dans lesquels vous disposez d’un accès local à l’ordinateur, et vous disposez de privilèges d’administrateur.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.

  • Toutes les applications empaquetées participant à des connexions de bouclage doivent déclarer la privateNetworkClientServer fonctionnalité dans leurs manifestes de package.All packaged applications participating in loopback connections need to declare the privateNetworkClientServer capability in their package manifests.
  • Si une application empaquetée se connecte à une application ou à un service décompressé, exécutez CheckNetIsolation.exe LoopbackExempt -a -n=<PACKAGEFAMILYNAME> pour ajouter une exemption de bouclage pour l’application empaquetée.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 une application ou un service décompressé se connecte à une application empaquetée, exécutez CheckNetIsolation.exe LoopbackExempt -is -n=<PACKAGEFAMILYNAME> pour permettre à l’application empaquetée de recevoir des connexions de bouclage 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 doit s’exécuter en continu pendant que l’application empaquetée écoute les connexions.CheckNetIsolation.exe must be running continuously while the packaged application is listening for connections.
    • L' -is indicateur a été introduit dans Windows 10, version 1607 (10,0 ; Build 14393).The -is flag was introduced in Windows 10, version 1607 (10.0; Build 14393).

Notes

Le nom de famille de packages requis pour l' -n indicateur de CheckNetIsolation.exe est disponible via l’éditeur de manifeste de package dans Visual Studio pendant le développement, via l' espace partenaires pour les applications publiées via le Microsoft Store ou via la commande PowerShell AppxPackage pour les applications qui sont déjà installées.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 est également utile pour déboguer les problèmes d’isolement réseau.CheckNetIsolation.exe is also useful for debugging network isolation issues.

CanauxPipes

Les canaux permettent une communication simple entre un serveur de canal et un ou plusieurs clients de canal.Pipes enable simple communication between a pipe server and one or more pipe clients.

Les canaux nommés et les canaux anonymes sont pris en charge avec les contraintes suivantes :Anonymous pipes and named pipes are supported with the following constraints:

  • Par défaut, les canaux nommés dans les applications empaquetées sont pris en charge uniquement entre les processus au sein du même package, sauf si un processus est de confiance totale.By default, named pipes in packaged applications are supported only between processes within the same package, unless a process is full trust.
  • Les canaux nommés peuvent être partagés entre les packages en suivant les instructions relatives au partage des objets nommés.Named pipes can be shared across packages following the guidelines for sharing named objects.
  • Les canaux nommés dans les applications empaquetées doivent utiliser la syntaxe du \\.\pipe\LOCAL\ nom du canal.Named pipes in packaged applications must use the syntax \\.\pipe\LOCAL\ for the pipe name.

RegistreRegistry

L’utilisation du Registre pour IPC est généralement déconseillée, mais elle est prise en charge pour le code existant.Registry usage for IPC is generally discouraged, but it is supported for existing code. Les applications empaquetées peuvent accéder uniquement aux clés de Registre auxquelles elles sont autorisées à accéder.Packaged applications can access only registry keys that they have permission to access.

Les applications de bureau empaquetées comme MSIX tirent parti de la virtualisation du registre , de sorte que les écritures de Registre globales sont contenues dans une ruche privée au sein du package MSIX.Desktop applications packaged as MSIX leverage registry virtualization such that global registry writes are contained to a private hive within the MSIX package. Cela permet la compatibilité du code source tout en minimisant l’impact global du Registre, et peut être utilisé pour IPC entre les processus dans le même package.This enables source code compatibility while minimizing global registry impact, and can be used for IPC between processes in the same package. Si vous devez utiliser le registre, ce modèle est préférable à la manipulation du registre global.If you must use the registry, this model is preferred versus manipulating the global registry.

RPCRPC

RPC peut être utilisé pour connecter une application empaquetée à un point de terminaison RPC Win32, à condition que l’application empaquetée dispose des fonctionnalités appropriées pour faire correspondre les listes de contrôle d’accès au point de terminaison 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.

Les fonctionnalités personnalisées permettent aux fabricants d’ordinateurs OEM et aux IHV de définir des fonctionnalités arbitraires, d’établir une liste de contrôle d’accès à leurs points de terminaison RPC, puis d’accorder ces fonctionnalités à des applications clientes autorisées.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. Pour obtenir un exemple d’application complet, consultez l’exemple CustomCapability .For a full sample application, see the CustomCapability sample.

Les points de terminaison RPC peuvent également être gérée à des applications packagées spécifiques pour limiter l’accès au point de terminaison aux seules applications sans nécessiter la surcharge de gestion des fonctionnalités personnalisées.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. Vous pouvez utiliser l’API DeriveAppContainerSidFromAppContainerName pour dériver un SID d’un nom de famille de packages, puis la liste de contrôle d’accès du point de terminaison RPC avec le SID, comme indiqué dans l’exemple 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.

Mémoire partagéeShared Memory

Le mappage de fichier peut être utilisé pour partager un fichier ou une mémoire entre deux ou plusieurs processus avec les contraintes suivantes :File mapping can be used to share a file or memory between two or more processes with the following constraints:

  • Par défaut, les mappages de fichiers dans les applications empaquetées sont pris en charge uniquement entre les processus dans le même package, sauf si un processus est de confiance totale.By default, file mappings in packaged applications are supported only between processes within the same package, unless a process is full trust.
  • Les mappages de fichiers peuvent être partagés entre les packages en suivant les instructions relatives au partage des objets nommés.File mappings can be shared across packages following the guidelines for sharing named objects.

La mémoire partagée est recommandée pour partager et manipuler efficacement de grandes quantités de données.Shared memory is recommended for efficiently sharing and manipulating large amounts of data.