Comunicazione interprocesso (IPC)Interprocess communication (IPC)

In questo argomento vengono illustrati i vari modi per eseguire la comunicazione interprocesso (IPC) tra le applicazioni piattaforma UWP (Universal Windows Platform) (UWP) e le applicazioni Win32.This topic explains various ways to perform interprocess communication (IPC) between Universal Windows Platform (UWP) applications and Win32 applications.

Servizi appApp services

I servizi app consentono alle applicazioni di esporre servizi che accettano e restituiscono sacchetti di proprietà di primitive (valore) in background.App services enable applications to expose services that accept and return property bags of primitives (ValueSet) in the background. Gli oggetti Rich possono essere passati se vengono serializzati.Rich objects can be passed if they're serialized.

I servizi app possono essere eseguiti fuori processo come attività in background o in elaborazione all'interno dell'applicazione in primo piano.App services can run either out of process as a background task, or in process within the foreground application.

I servizi app sono particolarmente usati per la condivisione di piccole quantità di dati in cui non è necessaria la latenza near Real Time.App services are best used for sharing small amounts of data where near real-time latency isn't required.

COMCOM

Com è un sistema distribuito orientato a oggetti per la creazione di componenti software binari in grado di interagire e comunicare.COM is a distributed object-oriented system for creating binary software components that can interact and communicate. Gli sviluppatori usano COM per creare componenti software riutilizzabili e livelli di automazione per un'applicazione.As a developer, you use COM to create reusable software components and automation layers for an application. I componenti COM possono essere in corso o non elaborati e possono comunicare tramite un modello client e server .COM components can be in process or out of process, and they can communicate via a client and server model. I server COM out-of-process sono stati usati a lungo come mezzo per la comunicazione tra oggetti.Out-of-process COM servers have long been used as a means for inter-object communication.

Le applicazioni in pacchetto con la funzionalità runFullTrust possono registrare server COM out-of-process per IPC tramite il manifesto del pacchetto.Packaged applications with the runFullTrust capability can register out-of-process COM servers for IPC via the package manifest. Questa operazione è nota come com in pacchetto.This is known as Packaged COM.

File SystemFilesystem

BroadFileSystemAccessBroadFileSystemAccess

Le applicazioni in pacchetto possono eseguire IPC usando il file system esteso dichiarando la funzionalità limitata broadFileSystemAccess .Packaged applications can perform IPC using the broad filesystem by declaring the broadFileSystemAccess restricted capability. Questa funzionalità concede alle API Windows. storage e alle API Win32 xxxFromApp l'accesso al file system esteso.This capability grants Windows.Storage APIs and xxxFromApp Win32 APIs access to the broad filesystem.

Per impostazione predefinita, IPC tramite il file System per le applicazioni in pacchetto è limitato agli altri meccanismi descritti in questa sezione.By default, IPC via the filesystem for packaged applications is restricted to the other mechanisms described in this section.

PublisherCacheFolderPublisherCacheFolder

PublisherCacheFolder consente alle applicazioni in pacchetto di dichiarare le cartelle nel manifesto che possono essere condivise con altri pacchetti dallo stesso server di pubblicazione.The PublisherCacheFolder enables packaged applications to declare folders in their manifest that can be shared with other packages by the same publisher.

La cartella di archiviazione condivisa presenta i requisiti e le restrizioni seguenti:The shared storage folder has the following requirements and restrictions:

  • Non è stato eseguito il backup o il roaming dei dati nella cartella di archiviazione condivisa.Data in the shared storage folder is not backed up or roamed.
  • L'utente può cancellare il contenuto della cartella di archiviazione condivisa.The user can clear the contents of the shared storage folder.
  • Non è possibile usare la cartella di archiviazione condivisa per condividere i dati tra le applicazioni da autori diversi.You can't use the shared storage folder to share data among applications from different publishers.
  • Non è possibile usare la cartella di archiviazione condivisa per condividere i dati tra utenti diversi.You can't use the shared storage folder to share data among different users.
  • La cartella di archiviazione condivisa non dispone di gestione delle versioni.The shared storage folder doesn't have version management.

Se si pubblicano più applicazioni e si sta cercando un meccanismo semplice per condividere i dati tra di essi, PublisherCacheFolder è una semplice opzione basata sul file System.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 viene usato in combinazione con i servizi app, le attivazioni del protocollo (ad esempio, LaunchUriForResultsAsync) e così via, per condividere StorageFiles tramite token.SharedAccessStorageManager is used in conjunction with App services, protocol activations (for example, LaunchUriForResultsAsync), etc., to share StorageFiles via tokens.

FullTrustProcessLauncherFullTrustProcessLauncher

Con la funzionalità runFullTrust , le applicazioni in pacchetto possono avviare processi con attendibilità totale all'interno dello stesso pacchetto.With the runFullTrust capability, packaged applications can launch full trust processes within the same package.

Per gli scenari in cui le restrizioni dei pacchetti sono un fardello o le opzioni IPC sono carenti, un'applicazione può usare un processo di attendibilità totale come proxy per interfacciarsi con il sistema e quindi IPC con il processo di attendibilità totale tramite servizi app o un altro meccanismo IPC ben supportato.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 viene usato per lo scambio di dati semplice (valore) con altre applicazioni in pacchetto che implementano il contratto di attivazione di ProtocolForResults .LaunchUriForResultsAsync is used for simple (ValueSet) data exchange with other packaged applications that implement the ProtocolForResults activation contract. A differenza dei servizi app, che in genere vengono eseguiti in background, l'applicazione di destinazione viene avviata in primo piano.Unlike App services, which typically run in the background, the target application is launched in the foreground.

È possibile condividere i file passando i token SharedStorageAccessManager all'applicazione tramite il valore del valore.Files can be shared by passing SharedStorageAccessManager tokens to the application via the ValueSet.

LoopbackLoopback

Il loopback è il processo di comunicazione con un server di rete in ascolto su localhost (indirizzo di loopback).Loopback is the process of communicating with a network server listening on localhost (the loopback address).

Per mantenere la sicurezza e l'isolamento di rete, le connessioni loopback per IPC sono bloccate per impostazione predefinita per le applicazioni in pacchetto.To maintain security and network isolation, loopback connections for IPC are blocked by default for packaged applications. È possibile abilitare le connessioni loopback tra un'applicazione in pacchetto attendibile usando le funzionalità e le proprietà del manifesto.You can enable loopback connections among trusted packaged application using capabilities and manifest properties.

  • Tutte le applicazioni in pacchetto che partecipano alle connessioni loopback dovranno dichiarare la privateNetworkClientServer funzionalità nei manifesti dei pacchetti.All packaged applications participating in loopback connections will need to declare the privateNetworkClientServer capability in their package manifests.
  • Due applicazioni in pacchetto possono comunicare tramite loopback dichiarando LoopbackAccessRules all'interno dei relativi manifesti di pacchetto.Two packaged applications can communicate via loopback by declaring LoopbackAccessRules within their package manifests.
    • Ogni applicazione deve elencare l'altra nella LoopbackAccessRules.Each application must list the other in its LoopbackAccessRules. Il client dichiara una regola "out" per il server e il server dichiara le regole "in" per i client supportati.The client declares an "out" Rule for the server, and the server declares "in" Rules for its supported clients.

Nota

Il nome della famiglia di pacchetti necessario per identificare un'applicazione in queste regole può essere trovato tramite l'editor del manifesto del pacchetto in Visual Studio durante la fase di sviluppo, tramite il centro per i partner per le applicazioni pubblicate tramite il Microsoft Store o tramite il comando Get-AppxPackage di PowerShell per le applicazioni già installate.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.

Le applicazioni e i servizi non inclusi nel pacchetto non hanno l'identità del pacchetto, quindi non possono essere dichiarati in LoopbackAccessRules.Unpackaged applications and services don't have package identity, so they can't be declared in LoopbackAccessRules. È possibile configurare un'applicazione in pacchetto per la connessione tramite loopback con le applicazioni e i servizi non inclusi nel pacchetto tramite CheckNetIsolation.exe, tuttavia questo è possibile solo per gli scenari di sideload o di debug in cui si dispone dell'accesso locale al computer e si dispone dei privilegi di amministratore.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.

  • Tutte le applicazioni in pacchetto che partecipano alle connessioni loopback devono dichiarare la privateNetworkClientServer funzionalità nei manifesti dei pacchetti.All packaged applications participating in loopback connections need to declare the privateNetworkClientServer capability in their package manifests.
  • Se un'applicazione in pacchetto si connette a un'applicazione o a un servizio non in pacchetto, eseguire CheckNetIsolation.exe LoopbackExempt -a -n=<PACKAGEFAMILYNAME> per aggiungere un'esenzione loopback per l'applicazione in pacchetto.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.
  • Se un'applicazione o un servizio non in pacchetto si connette a un'applicazione in pacchetto, eseguire CheckNetIsolation.exe LoopbackExempt -is -n=<PACKAGEFAMILYNAME> per consentire all'applicazione in pacchetto di ricevere le connessioni loopback in ingresso.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 deve essere eseguito in modo continuo mentre l'applicazione in pacchetto è in ascolto delle connessioni.CheckNetIsolation.exe must be running continuously while the packaged application is listening for connections.
    • Il -is flag è stato introdotto in Windows 10, versione 1607 (10,0; Compilazione 14393).The -is flag was introduced in Windows 10, version 1607 (10.0; Build 14393).

Nota

Il nome della famiglia di pacchetti necessario per il -n flag di CheckNetIsolation.exe può essere trovato tramite l'editor del manifesto del pacchetto in Visual Studio durante la fase di sviluppo, tramite il centro per i partner per le applicazioni pubblicate tramite il Microsoft Store oppure tramite il comando Get-AppxPackage di PowerShell per le applicazioni già installate.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 è utile anche per il debug di problemi di isolamento rete.CheckNetIsolation.exe is also useful for debugging network isolation issues.

PipePipes

Le pipe consentono una comunicazione semplice tra un server pipe e uno o più client pipe.Pipes enable simple communication between a pipe server and one or more pipe clients.

Le pipe anonime e le named pipe sono supportate con i vincoli seguenti:Anonymous pipes and named pipes are supported with the following constraints:

  • Per impostazione predefinita, le named pipe nelle applicazioni in pacchetto sono supportate solo tra i processi all'interno dello stesso pacchetto, a meno che non si tratti di un processo con attendibilità totale.By default, named pipes in packaged applications are supported only between processes within the same package, unless a process is full trust.
  • Le named pipe possono essere condivise tra i pacchetti seguendo le linee guida per la condivisione di oggetti denominati.Named pipes can be shared across packages following the guidelines for sharing named objects.
  • Le named pipe nelle applicazioni in pacchetto devono usare la sintassi \\.\pipe\LOCAL\ per il nome della pipe.Named pipes in packaged applications must use the syntax \\.\pipe\LOCAL\ for the pipe name.

RegistroRegistry

L'utilizzo del registro di sistema per IPC è in genere sconsigliato, ma è supportato per il codice esistente.Registry usage for IPC is generally discouraged, but it is supported for existing code. Le applicazioni in pacchetto possono accedere solo alle chiavi del registro di sistema per le quali sono autorizzati ad accedere.Packaged applications can access only registry keys that they have permission to access.

Le applicazioni desktop assemblate come MSIX sfruttano la virtualizzazione del registro di sistema in modo che le Scritture del registro di sistema siano contenute in un hive privato all'interno del pacchetto MSIXDesktop applications packaged as MSIX leverage registry virtualization such that global registry writes are contained to a private hive within the MSIX package. Ciò consente la compatibilità del codice sorgente riducendo al minimo l'effetto globale del registro di sistema e può essere usato per IPC tra processi nello stesso pacchetto.This enables source code compatibility while minimizing global registry impact, and can be used for IPC between processes in the same package. Se è necessario usare il registro di sistema, questo modello è preferibile rispetto alla manipolazione del registro di sistema globale.If you must use the registry, this model is preferred versus manipulating the global registry.

RPCRPC

È possibile utilizzare RPC per connettere un'applicazione in pacchetto a un endpoint RPC Win32, a condizione che l'applicazione in pacchetto disponga delle funzionalità corrette per la corrispondenza degli ACL sull'endpoint 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.

Le funzionalità personalizzate consentono agli OEM e ai IHV di definire funzionalità arbitrarie, eseguire l'ACL degli endpoint RPC con loroe quindi concedere tali funzionalità alle applicazioni client autorizzate.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. Per un'applicazione di esempio completa, vedere l'esempio CustomCapability .For a full sample application, see the CustomCapability sample.

Gli endpoint RPC possono anche essere ACL a specifiche applicazioni in pacchetto per limitare l'accesso all'endpoint solo a tali applicazioni senza richiedere il sovraccarico di gestione delle funzionalità personalizzate.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. È possibile usare l'API DeriveAppContainerSidFromAppContainerName per derivare un SID da un nome di famiglia di pacchetti, quindi eseguire l'ACL dell'endpoint RPC con il SID, come illustrato nell'esempio 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.

Shared MemoryShared Memory

Il mapping dei file può essere usato per condividere un file o una memoria tra due o più processi con i vincoli seguenti:File mapping can be used to share a file or memory between two or more processes with the following constraints:

  • Per impostazione predefinita, i mapping dei file nelle applicazioni in pacchetto sono supportati solo tra processi all'interno dello stesso pacchetto, a meno che un processo non sia completamente attendibile.By default, file mappings in packaged applications are supported only between processes within the same package, unless a process is full trust.
  • I mapping dei file possono essere condivisi tra i pacchetti seguendo le linee guida per la condivisione di oggetti denominati.File mappings can be shared across packages following the guidelines for sharing named objects.

La memoria condivisa è consigliata per la condivisione e la manipolazione efficaci di grandi quantità di dati.Shared memory is recommended for efficiently sharing and manipulating large amounts of data.