Sdílet prostřednictvím


Komunikace mezi procesy (IPC)

Toto téma vysvětluje různé způsoby provádění komunikace mezi procesy (IPC) mezi aplikacemi univerzální platformy Windows (UPW) a aplikacemi Win32.

Služby aplikací

App Services umožňují aplikacím zveřejnit služby, které přijímají a vracejí kontejnery vlastností primitiv (ValueSet) na pozadí. Bohaté objekty lze předat, pokud jsou serializovány.

Služby App Services mohou běžet buď mimo proces jako úloha na pozadí, nebo v procesu v rámci popředí aplikace.

Aplikační služby jsou nejlépe využívány ke sdílení malého množství dat, kde není vyžadována latence téměř v reálném čase.

Modelu com

COM je distribuovaný objektově orientovaný systém pro vytváření binárních softwarových komponent, které mohou interagovat a komunikovat. Jako vývojář používáte com k vytváření opakovaně použitelných softwarových komponent a vrstev automatizace pro aplikaci. Komponenty modelu COM můžou být v procesu nebo mimo proces a můžou komunikovat prostřednictvím modelu klienta a serveru . Mimoprocesové COM servery se již dlouho používají jako prostředek pro komunikaci mezi objekty.

Zabalené aplikace se schopností runFullTrust mohou pomocí manifestu balíčku registrovat COM servery mimo proces pro IPC. To se označuje jako Packaged COM.

Systém souborů

Přístup k systému souborů BroadFileAccess

Zabalené aplikace mohou provádět IPC pomocí širokého systému souborů deklarováním omezené funkce broadFileSystemAccess. Tato funkce uděluje rozhraní API Windows.Storage a xxxFromApp Win32 přístup k celkovému souborovému systému.

Ve výchozím nastavení je IPC prostřednictvím systému souborů pro zabalené aplikace omezen na ostatní mechanismy popsané v této části.

Složka_mezipaměti vydavatele

PublisherCacheFolder umožňuje zabaleným aplikacím deklarovat složky v manifestu, které mohou být sdíleny s jinými balíčky stejného vydavatele.

Složka sdíleného úložiště má následující požadavky a omezení:

  • Data ve složce sdíleného úložiště se nezálohují ani nepřesunou.
  • Uživatel může vymazat obsah sdílené složky úložiště.
  • Sdílenou složku úložiště nemůžete použít ke sdílení dat mezi aplikacemi od různých vydavatelů.
  • Sdílenou složku úložiště nemůžete použít ke sdílení dat mezi různými uživateli.
  • Složka sdíleného úložiště nemá správu verzí.

Pokud publikujete více aplikací a hledáte jednoduchý mechanismus pro sdílení dat mezi nimi, pak publisherCacheFolder je jednoduchá možnost založená na systému souborů.

Manažer úložiště se sdíleným přístupem

SharedAccessStorageManager se používá ve spojení se službami App Services, aktivací protokolu (například LaunchUriForResultsAsync) atd., ke sdílení souborů StorageFiles prostřednictvím tokenů.

Spouštěč procesu FullTrustProcess.

S funkcí runFullTrust mohou zabalené aplikace spouštět úplné procesy důvěryhodnosti v rámci stejného balíčku.

Ve scénářích, kdy jsou omezení balíčků zátěží nebo chybí možnosti IPC, může aplikace jako proxy použít úplný proces důvěryhodnosti pro rozhraní se systémem a pak IPC s úplným procesem důvěryhodnosti samotným prostřednictvím služeb App Services nebo některého dobře podporovaného mechanismu IPC.

LaunchUriForResultsAsync

LaunchUriForResultsAsync se používá pro jednoduchou výměnu dat (ValueSet) s jinými zabalenými aplikacemi, které implementují aktivační kontrakt ProtocolForResults . Na rozdíl od služeb App Services, které se obvykle spouští na pozadí, se cílová aplikace spustí v popředí.

Soubory je možné sdílet předáním tokenů SharedStorageAccessManager aplikaci prostřednictvím valueSet.

Zpětná smyčka

Loopback je proces komunikace se síťovým serverem, který naslouchá na localhost (adresu loopback).

Kvůli zachování bezpečnosti a izolace sítě jsou ve výchozím nastavení pro zabalené aplikace blokována připojení zpětné smyčky pro IPC. Připojení zpětné smyčky mezi důvěryhodnými zabalenými aplikacemi můžete povolit pomocí schopností a vlastností manifestu.

  • Všechny balíčkové aplikace, které se účastní připojení zpětné smyčky, budou muset deklarovat funkci privateNetworkClientServer v manifestu balíčků .
  • Dvě zabalené aplikace mohou komunikovat prostřednictvím zpětné smyčky deklarováním LoopbackAccessRules v jejich manifestech balíčků.
    • Každá aplikace musí vypsat druhou aplikaci v seznamu LoopbackAccessRules. Klient deklaruje pravidlo "out" pro server a server deklaruje pravidla "in" pro své podporované klienty.

Poznámka:

Název rodiny balíčků potřebný k identifikaci aplikace v těchto pravidlech najdete prostřednictvím editoru manifestu balíčku v sadě Visual Studio během vývoje, prostřednictvím Partnerského centra pro aplikace publikované v Microsoft Storu nebo pomocí příkazu Get-AppxPackage PowerShellu pro aplikace, které jsou již nainstalovány.

Rozbalené aplikace a služby nemají identitu balíčku, takže je nejde deklarovat ve smyčce LoopbackAccessRules. Můžete nakonfigurovat zabalenou aplikaci tak, aby se připojovala pomocí zpětné smyčky k rozbaleným aplikacím a službám přes CheckNetIsolation.exe. To je však možné pouze ve scénářích sideloadu nebo ladění, kde máte místní přístup k počítači a oprávnění správce.

  • Všechny balíčkové aplikace, využívající zpětná připojení, musí deklarovat oprávnění privateNetworkClientServer v balíčkových manifestech .
  • Pokud se balíčkovaná aplikace připojuje k nebalíčkované aplikaci nebo službě, spusťte CheckNetIsolation.exe LoopbackExempt -a -n=<PACKAGEFAMILYNAME>, abyste přidali výjimku zpětné smyčky pro balíčkovanou aplikaci.
  • Pokud se nebalená aplikace nebo služba připojuje k balené aplikaci, spusťte CheckNetIsolation.exe LoopbackExempt -is -n=<PACKAGEFAMILYNAME> a povolte balené aplikaci přijímat příchozí zpětné smyčky připojení.
    • CheckNetIsolation.exe musí běžet nepřetržitě, zatímco zabalená aplikace čeká na připojení.
    • Příznak -is byl zaveden ve Windows 10 verze 1607 (10.0; Build 14393).

Poznámka:

Název rodiny balíčků vyžadovaný příznakem -nCheckNetIsolation.exe najdete v editoru manifestu balíčku v sadě Visual Studio během vývoje, prostřednictvím Partnerského centra pro aplikace publikované v Microsoft Storu nebo pomocí příkazu Get-AppxPackage PowerShellu pro aplikace, které jsou už nainstalované.

CheckNetIsolation.exe je také užitečný pro ladění problémů s izolací sítě.

Potrubí

Kanály umožňují jednoduchou komunikaci mezi serverem kanálu a jedním nebo více klienty kanálu.

Anonymní kanály a pojmenované kanály jsou podporovány s následujícími omezeními:

  • Ve výchozím nastavení jsou pojmenované kanály v zabalených aplikacích podporovány pouze mezi procesy v rámci stejného balíčku, pokud není proces v plné důvěře.
  • Pojmenované kanály je možné sdílet mezi balíčky podle pokynů pro sdílení pojmenovaných objektů.
  • Pojmenované kanály (v zabalených a rozbalených aplikacích) musí používat syntaxi \\.\pipe\LOCAL\ názvu kanálu.

Rejstřík

Použití registru pro IPC se obecně nedoporučuje, ale podporuje se pro stávající kód. Zabalené aplikace mají přístup pouze ke klíčům registru, ke kterým mají oprávnění k přístupu.

Běžně zabalené desktopové aplikace (viz Sestavení balíčku MSIX z kódu) využívají virtualizaci registru , aby globální zápisy registru byly obsaženy do privátního podregistru v rámci balíčku MSIX. To umožňuje kompatibilitu zdrojového kódu při minimalizaci dopadu globálního registru a lze ji použít pro IPC mezi procesy ve stejném balíčku. Pokud je nutné použít registr, tento model je preferován před manipulací s globálním registrem.

RPC

Rpc se dá použít k připojení zabalené aplikace ke koncovému bodu RPC win32 za předpokladu, že zabalená aplikace má správné funkce odpovídající seznamům ACL v koncovém bodu RPC.

Vlastní schopnosti umožňují výrobcům originálního vybavení a nezávislým prodejcům hardwaru definovat libovolné schopnosti, řídit přístup ke svým koncovým bodům RPC prostřednictvím ACL a pak tyto schopnosti udělovat autorizovaným klientským aplikacím. Úplnou ukázkovou aplikaci najdete v ukázce CustomCapability .

Koncové body RPC mohou být také zabezpečeny pomocí ACL pro konkrétní balíčkované aplikace, aby omezily přístup ke koncovému bodu jen na tyto aplikace, aniž by vyžadovaly režii správy vlastních schopností. Rozhraní API DeriveAppContainerSidFromAppContainerName můžete použít k odvození identifikátoru SID z názvu rodiny balíčků a následně nastavit oprávnění pro koncový bod RPC s tímto identifikátorem SID, jak je znázorněno v ukázce CustomCapability.

Sdílená paměť

Mapování souborů lze použít ke sdílení souboru nebo paměti mezi dvěma nebo více procesy s následujícími omezeními:

  • Ve výchozím nastavení se mapování souborů v zabalených aplikacích podporuje pouze mezi procesy v rámci stejného balíku, pokud proces není ve stavu plné důvěry.
  • Mapování souborů je možné sdílet mezi balíčky podle pokynů pro sdílení pojmenovaných objektů.

Sdílená paměť se doporučuje pro efektivní sdílení a manipulaci s velkými objemy dat.