Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette rubrique explique différentes façons d’effectuer une communication interprocesseur (IPC) entre les applications de plateforme Windows universelle (UWP) et les applications Win32.
Services d’application
Les services d'application permettent aux applications d'exposer des services qui, en arrière-plan, acceptent et retournent des ensembles de valeurs de primitives (ValueSet). Les objets complexes peuvent être transmis s’ils sont sérialisés.
Les services d’application peuvent exécuter hors processus en tant que tâche en arrière-plan, ou dans les de processus au sein de l’application de premier plan.
Les services d’application sont mieux utilisés pour partager de petites quantités de données où la latence en quasi temps réel n’est pas nécessaire.
COM
COM est un système distribué orienté objet permettant de créer des composants logiciels binaires qui peuvent interagir et communiquer. En tant que développeur, vous utilisez COM pour créer des composants logiciels réutilisables et des couches d’automatisation pour une application. Les composants COM peuvent être en cours ou hors processus, et ils peuvent communiquer via un modèle client et serveur. Les serveurs COM hors processus ont depuis longtemps été utilisés comme moyen de communication inter-objets.
Les applications empaquetées avec la fonctionnalité runFullTrust
Système de fichiers
BroadFileSystemAccess
Les applications empaquetées peuvent effectuer l’IPC à l’aide du système de fichiers étendu en déclarant la fonctionnalité broadFileSystemAccess restreinte. Cette fonctionnalité accorde API windows.Storage et xxxFromApp l’accès aux API Win32 au système de fichiers étendu.
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.
PublisherCacheFolder
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 éditeur.
Le dossier de stockage partagé présente les exigences et restrictions suivantes :
- Les données dans le dossier de stockage partagé ne sont ni sauvegardées ni synchronisées.
- L’utilisateur peut effacer le contenu du dossier de stockage partagé.
- Vous ne pouvez pas utiliser le dossier de stockage partagé pour partager des données entre des applications provenant de différents éditeurs.
- Vous ne pouvez pas utiliser le dossier de stockage partagé pour partager des données entre différents utilisateurs.
- Le dossier de stockage partagé n’a pas de gestion des versions.
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 le système de fichiers.
SharedAccessStorageManager
SharedAccessStorageManager est utilisé conjointement avec les services d’application, les activations de protocole (par exemple, LaunchUriForResultsAsync), etc., pour partager StorageFiles via des jetons.
FullTrustProcessLauncher
Avec la fonctionnalité runFullTrust, les applications empaquetées peuvent lancer des processus de confiance totale au sein du même package.
Pour les scénarios où les restrictions de package sont un fardeau ou que 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 lui-même via App Services ou un autre mécanisme IPC bien pris en charge.
LaunchUriForResultsAsync
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. Contrairement aux services d’application, qui s’exécutent généralement en arrière-plan, l’application cible est lancée au premier plan.
Les fichiers peuvent être partagés en passant SharedStorageAccessManager jetons à l’application via ValueSet.
Bouclage
Le bouclage est le processus de communication avec un serveur réseau qui écoute sur localhost (l'adresse de bouclage).
Pour maintenir la sécurité et l’isolation réseau, les connexions de boucle locale pour IPC sont bloquées par défaut pour les applications empaquetées. Vous pouvez activer les connexions de bouclage entre les applications empaquetées approuvées à l’aide de fonctionnalités et propriétés de manifeste.
- Toutes les applications empaquetées participant à des connexions de bouclage doivent déclarer la fonctionnalité
privateNetworkClientServerdans le manifeste de package de . - Deux applications empaquetées peuvent communiquer en utilisant un loopback en déclarant LoopbackAccessRules dans le manifeste de paquet.
- Chaque application doit répertorier l'autre dans son 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.
Remarque
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 Espace partenaires pour les applications publiées via le Microsoft Store, ou via la commande Get-AppxPackage PowerShell pour les applications déjà installées.
Les applications et services non empaquetés n’ont pas d’identité de package. Ils ne peuvent donc pas être déclarés dans LoopbackAccessRules. Vous pouvez configurer une application empaquetée pour vous connecter via un bouclage avec des applications et des services non empaquetés via CheckNetIsolation.exe, mais cela n’est possible que pour les scénarios de chargement indépendant ou de débogage où vous avez un accès local à l’ordinateur et que vous disposez de privilèges d’administrateur.
- Toutes les applications empaquetées participant à des connexions de bouclage doivent déclarer la fonctionnalité
privateNetworkClientServerdans leur manifeste de paquet . - Si une application empaquetée se connecte à une application ou un service non empaqueté, exécutez
CheckNetIsolation.exe LoopbackExempt -a -n=<PACKAGEFAMILYNAME>pour ajouter une exemption de bouclage pour l’application empaquetée. - Si une application ou un service non empaqueté 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.- CheckNetIsolation.exe devez être en cours d’exécution en continu pendant que l’application empaquetée écoute les connexions.
- L’indicateur
-isa été introduit dans Windows 10, version 1607 (10.0 ; Build 14393).
Remarque
Le nom de la famille de packages requis pour l’indicateur de -n de CheckNetIsolation.exe est disponible via l’éditeur de manifeste de package dans Visual Studio pendant le temps de développement, via Espace partenaires pour les applications publiées via le Microsoft Store, ou via la commande Get-AppxPackage PowerShell pour les applications déjà installées.
CheckNetIsolation.exe est également utile pour débogage des problèmes d’isolation réseau.
Tuyaux
Pipes permettent une communication simple entre un serveur de pipes et un ou plusieurs clients de pipes.
canaux anonymes et canaux nommés sont pris en charge sous réserve des contraintes suivantes :
- Par défaut, les canaux nommés dans les applications empaquetées sont pris en charge uniquement entre les processus du même package, sauf si un processus est de confiance totale.
- Les canaux nommés peuvent être partagés entre les packages en suivant les directives pour le partage d'objets nommés .
- Les canaux nommés (dans les applications empaquetées et non empaquetées) doivent utiliser la syntaxe
\\.\pipe\LOCAL\du nom du canal.
Registre
l'utilisation du Registre pour la communication inter-processus (IPC) est généralement déconseillée, mais elle est prise en charge pour le code existant. Les applications empaquetées peuvent accéder uniquement aux clés de Registre auxquelles elles sont autorisées à accéder.
Couramment, les applications de bureau empaquetées (voir Génération d’un package MSIX à partir de votre code) tirent parti de virtualisation du Registre de sorte que les écritures de registre globales soient contenues dans une ruche privée dans le package MSIX. Cela permet la compatibilité du code source tout en réduisant l’impact global du registre et peut être utilisée pour l’IPC entre les processus du même package. Si vous devez utiliser le Registre, ce modèle est préféré par rapport à la manipulation du registre global.
Réf.
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 correspondre aux listes de contrôle d’accès sur le point de terminaison RPC.
Les fonctionnalités personnalisées permettent aux oem et aux IMV de de définir des fonctionnalités arbitraires, ACL leurs points de terminaison RPC avec eux, puis accorder ces fonctionnalités aux applications clientes autorisées. Pour obtenir un exemple d’application complet, consultez l’exemple CustomCapability.
Les points de terminaison RPC peuvent également être soumis à des ACL pour des applications packagées spécifiques, afin de limiter l’accès au point de terminaison à ces applications, sans nécessiter la complexité de gestion des fonctionnalités personnalisées. Vous pouvez utiliser l’API DeriveAppContainerSidFromAppContainerName pour dériver un SID à partir d’un nom de famille de package, puis ACL le point de terminaison RPC avec le SID, comme indiqué dans l’exemple CustomCapability.
Mémoire partagée
de mappage de fichiers peut être utilisé pour partager un fichier ou une mémoire entre deux processus ou plus avec les contraintes suivantes :
- Par défaut, les mappages de fichiers 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.
- Les mappages de fichiers peuvent être partagés entre les packages en suivant les instructions pour partage d’objets nommés.
La mémoire partagée est recommandée pour partager et manipuler efficacement de grandes quantités de données.