Aracılığıyla paylaş


İşlemler arası iletişim (IPC)

Bu konuda, Evrensel Windows Platformu (UWP) uygulamaları ve Win32 uygulamaları arasında işlemler arası iletişim (IPC) gerçekleştirmenin çeşitli yolları açıklanmaktadır.

Uygulama hizmetleri

Uygulama hizmetleri, uygulamaların arka planda temel veri türlerini (ValueSet) içeren özellik kümelerini kabul eden ve döndüren hizmetleri kullanıma sunmasını sağlar. Karmaşık nesneler,serileştirilmiş olarak aktarılabilir.

Uygulama hizmetleri işlem dışı arka plan görevi olarak çalıştırabilir veya ön plan uygulamasında işlem .

Uygulama hizmetleri, neredeyse gerçek zamanlı gecikme süresinin gerekli olmadığı küçük miktarlardaki verileri paylaşmak için en iyi şekilde kullanılır.

COM

COM , etkileşim kurabilen ve iletişim kurabilen ikili yazılım bileşenleri oluşturmaya yönelik dağıtılmış nesne odaklı bir sistemdir. Geliştirici olarak, bir uygulama için yeniden kullanılabilir yazılım bileşenleri ve otomasyon katmanları oluşturmak için COM kullanırsınız. COM bileşenleri işlem aşamasında veya işlem dışı olabilir ve bir istemci ve sunucu modeli aracılığıyla iletişim kurabilir. İşlem dışı COM sunucuları uzun zamandır nesneler arası iletişim için bir araç olarak kullanılmıştır.

runFullTrust özelliğine sahip paketlenmiş uygulamalar, paket bildirimi aracılığıyla IPC için işlem dışı COM sunucularını kaydedebilir. Bu, Paketlenmiş COMolarak bilinir.

Dosya Sistemi

Geniş Dosya Sistemi Erişimi

Paketlenmiş uygulamalar broadFileSystemAccess kısıtlanmış özelliğini bildirerek geniş dosya sistemini kullanarak IPC gerçekleştirebilir. Bu özellik , Windows.Storage API'leri ve xxxFromApp Win32 API'lerine geniş dosya sistemine erişim verir.

Varsayılan olarak, paketlenmiş uygulamalar için dosya sistemi aracılığıyla IPC, bu bölümde açıklanan diğer mekanizmalarla sınırlıdır.

YayıncıÖnbellekKlasörü

PublisherCacheFolder, paketlenmiş uygulamaların kendi bildirimlerinde aynı yayımcı tarafından diğer paketlerle paylaşılabilen klasörleri bildirmesine olanak tanır.

Paylaşılan depolama klasörü aşağıdaki gereksinimlere ve kısıtlamalara sahiptir:

  • Paylaşılan depolama klasöründeki veriler yedeklenmez veya dolaşıma alınmaz.
  • Kullanıcı paylaşılan depolama klasörünün içeriğini temizleyebilir.
  • Farklı yayımcıların uygulamaları arasında veri paylaşmak için paylaşılan depolama klasörünü kullanamazsınız.
  • Verileri farklı kullanıcılar arasında paylaşmak için paylaşılan depolama klasörünü kullanamazsınız.
  • Paylaşılan depolama klasörünün sürüm yönetimi yoktur.

Birden çok uygulama yayımlıyorsanız ve bunlar arasında veri paylaşmak için basit bir mekanizma arıyorsanız PublisherCacheFolder basit bir dosya sistemi tabanlı seçenektir.

OrtakErişimDepolamaYöneticisi

SharedAccessStorageManager , StorageFiles'ı belirteçler aracılığıyla paylaşmak için Uygulama hizmetleri, protokol etkinleştirmeleri (örneğin, LaunchUriForResultsAsync) vb. ile birlikte kullanılır.

FullTrustProcessLauncher

runFullTrust özelliğiyle, paketlenmiş uygulamalar aynı paket içinde tam güvenilirlik süreçlerini başlatabilir.

Paket kısıtlamalarının yük olduğu veya IPC seçeneklerinin eksik olduğu senaryolarda, bir uygulama, sistemle arabirim kurmak için vekil olarak tam güvenli bir işlemi kullanabilir ve ardından Uygulama hizmetleri veya başka iyi desteklenen bir IPC mekanizması aracılığıyla bu tam güvenli işlemin kendisiyle IPC yapabilir.

LaunchUriForResultsAsync

LaunchUriForResultsAsync, ProtocolForResults etkinleştirme sözleşmesini uygulayan diğer paketlenmiş uygulamalarla basit (ValueSet) veri alışverişi için kullanılır. Genellikle arka planda çalışan Uygulama hizmetlerinden farklı olarak, hedef uygulama ön planda başlatılır.

SharedStorageAccessManager belirteçleri ValueSet aracılığıyla uygulamaya geçirilerek dosyalar paylaşılabilir.

Döngüsel geri besleme

Geri döngü, localhost'ta (geri döngü adresi) dinleyen bir ağ sunucusuyla iletişim kurma işlemidir.

Güvenlik ve ağ yalıtımını korumak için, paketlenmiş uygulamalarda IPC için geri döngü bağlantıları varsayılan olarak engellenir. bildirim özellikleri ve özellikleri kullanarak güvenilen paketlenmiş uygulama arasında geri döngü bağlantılarını etkinleştirebilirsiniz.

  • Geri döngü bağlantılarına katılan tüm paketlenmiş uygulamaların privateNetworkClientServer gerekir.
  • İki paketlenmiş uygulama, paket bildirilerinde LoopbackAccessRules bildirerek geri döngü yoluyla iletişim kurabilir.

Uyarı

Bu Kurallarda bir uygulamayı tanımlamak için gereken paket ailesi adı geliştirme sırasında Visual Studio'daki paket bildirimi düzenleyicisi, Microsoft Store aracılığıyla yayımlanan uygulamalar için İş Ortağı Merkezi veya zaten yüklü uygulamalar için Get-AppxPackage PowerShell komutu aracılığıyla bulunabilir.

Paketlenmemiş uygulama ve hizmetlerin paket kimliği olmadığından , Bunlar LoopbackAccessRules içinde bildirilemez. Paketlenmiş bir uygulamayı CheckNetIsolation.exearacılığıyla paketlenmemiş uygulama ve hizmetlerle geri döngü yoluyla bağlanacak şekilde yapılandırabilirsiniz, ancak bu yalnızca makineye yerel erişiminiz olan ve yönetici ayrıcalıklarına sahip olduğunuz dışarıdan yükleme veya hata ayıklama senaryoları için mümkündür.

  • Geri döngü bağlantılarına katılan tüm paketlenmiş uygulamaların privateNetworkClientServer gerekir.
  • Paketlenmiş bir uygulama paketlenmemiş bir uygulama veya hizmete bağlanıyorsa, paketlenmiş uygulama için geri döngü muafiyeti eklemek için komutunu çalıştırın CheckNetIsolation.exe LoopbackExempt -a -n=<PACKAGEFAMILYNAME> .
  • Paketlenmemiş bir uygulama veya hizmet paketlenmiş bir uygulamaya bağlanıyorsa, paketlenmiş uygulamanın gelen geri döngü bağlantılarını almasını sağlamak için komutunu çalıştırın CheckNetIsolation.exe LoopbackExempt -is -n=<PACKAGEFAMILYNAME> .
    • CheckNetIsolation.exe paketlenmiş uygulama bağlantıları dinlerken sürekli çalışıyor olmalıdır.
    • -is bayrağı Windows 10, sürüm 1607'de (10.0; Derleme 14393) olarak tanıtıldı.

Uyarı

Geliştirme sırasında Visual Studio'daki paket bildirimi düzenleyicisi, Microsoft Store'da yayımlanan uygulamalar için -n veya zaten yüklü uygulamalar için Get-AppxPackage PowerShell komutu aracılığıyla CheckNetIsolation.exe bayrağı için gereken paket ailesi adı bulunabilir.

CheckNetIsolation.exe,ağ yalıtımı sorunlarının hata ayıklaması için de yararlıdır.

Boru

Kanallar , bir kanal sunucusu ile bir veya daha fazla kanal istemcisi arasında basit iletişim sağlar.

Anonim borular ve adlandırılmış borular aşağıdaki kısıtlamalarla desteklenir:

  • Tam güvene sahip değilse, varsayılan olarak, paketlenmiş uygulamalarda adlandırılmış kanallar yalnızca aynı paket içindeki işlemler arasında desteklenir.
  • Adlandırılmış kanallar, adlandırılmış nesneleripaylaşma yönergelerine uyularak paketler arasında paylaşılabilir.
  • Adlandırılmış kanallar (paketlenmiş ve paketlenmemiş uygulamalarda) kanal adı için söz dizimini \\.\pipe\LOCAL\ kullanmalıdır.

Kayıt sistemi

IPC için kayıt defteri kullanımı genellikle önerilmez, ancak mevcut kod için desteklenir. Paketlenmiş uygulamalar yalnızca erişim iznine sahip oldukları kayıt defteri anahtarlarına erişebilir.

Genellikle, paket halindeki masaüstü uygulamaları (bkz. Kodunuzdan MSIX paketi oluşturma), global kayıt defteri yazma işlemlerini MSIX paketi içindeki özel bir alanda tutmak için kayıt defteri sanallaştırmasını kullanır. Bu, genel kayıt defteri etkisini en aza indirirken kaynak kodu uyumluluğunu etkinleştirir ve aynı paketteki işlemler arasında IPC için kullanılabilir. Kayıt defterini kullanmanız gerekiyorsa, genel kayıt defterini düzenlemek yerine bu model tercih edilir.

RPC

Paketlenmiş uygulamanın RPC uç noktasındaki ACL'lerle eşleşecek doğru özelliklere sahip olması koşuluyla, RPC paketlenmiş bir uygulamayı Win32 RPC uç noktasına bağlamak için kullanılabilir.

Özel özellikler, OEM'lerin ve IHV'lerin rastgele özellikler tanımlamasına olanak tanır, ACL'lerinin RPC uç noktalarınıile birlikteyetkili istemci uygulamalarına . Tam bir örnek uygulama için CustomCapability örneğine bakın.

RPC uç noktaları, özel özelliklerin yönetim ek yüküne gerek kalmadan uç noktaya erişimi yalnızca bu uygulamalarla sınırlandırmak için belirli paketlenmiş uygulamalara acledilebilir. Paket ailesi adından bir SID türetmek için DeriveAppContainerSidFromAppContainerName API'sini kullanabilir ve ardından CustomCapability örneğinde gösterildiği gibi bu SID ile RPC uç noktasını ACL ile güvence altına alabilirsiniz.

Paylaşılan Bellek

Dosya eşleme , aşağıdaki kısıtlamalarla iki veya daha fazla işlem arasında dosya veya bellek paylaşmak için kullanılabilir:

  • Varsayılan olarak, bir işlem tam güven olmadığı sürece paketlenmiş uygulamalarda dosya eşlemeleri yalnızca aynı paket içindeki işlemler arasında desteklenir.
  • Dosya eşlemeleri , adlandırılmış nesneleri paylaşma yönergelerini izleyerek paketler arasında paylaşılabilir.

Paylaşılan bellek, büyük miktarda veriyi verimli bir şekilde paylaşmak ve işlemek için önerilir.