Komunikasi antarproseksi (IPC)

Topik ini menjelaskan berbagai cara untuk melakukan komunikasi antarproseksi (IPC) antara aplikasi Universal Windows Platform (UWP) dan aplikasi Win32.

Layanan aplikasi

Layanan aplikasi memungkinkan aplikasi untuk mengekspos layanan yang menerima dan mengembalikan sekumpulan properti primitif (ValueSet) di latar belakang. Objek kaya dapat diteruskan jika serial.

Layanan aplikasi dapat berjalan di luar proses sebagai tugas latar belakang, atau berjalan dalam proses dalam aplikasi utama.

Layanan aplikasi paling baik digunakan untuk berbagi data dalam jumlah kecil di mana latensi mendekati real-time tidak diperlukan.

COM

COM adalah sistem berorientasi objek terdistribusi untuk membuat komponen perangkat lunak biner yang dapat berinteraksi dan berkomunikasi. Sebagai pengembang, Anda menggunakan COM untuk membuat komponen perangkat lunak dan lapisan otomatisasi yang dapat digunakan kembali untuk aplikasi. Komponen COM dapat dalam proses atau di luar proses, dan mereka dapat berkomunikasi melalui model klien dan server . Server COM di luar proses telah lama digunakan sebagai sarana untuk komunikasi antar objek.

Aplikasi yang dikemas dengan kemampuan runFullTrust dapat mendaftarkan server COM di luar proses untuk IPC melalui manifes paket . Ini dikenal sebagai Packaged COM.

Sistem file

Akses BroadFileSystem

Aplikasi paket dapat melakukan IPC menggunakan akses luas ke sistem file dengan menyatakan kapabilitas terbatas broadFileSystemAccess. Kemampuan ini memberikan akses API Windows.Storage dan API xxxFromApp Win32 ke sistem file yang luas.

Secara default, IPC melalui sistem file untuk aplikasi paket dibatasi untuk mekanisme lain yang dijelaskan di bagian ini.

PublisherCacheFolder

PublisherCacheFolder memungkinkan aplikasi yang dikemas untuk mendeklarasikan folder dalam manifesnya yang dapat dibagikan dengan paket lain oleh penerbit yang sama.

Folder penyimpanan bersama memiliki persyaratan dan batasan berikut:

  • Data dalam folder penyimpanan bersama tidak dicadangkan atau disinkronkan.
  • Pengguna dapat menghapus konten folder penyimpanan bersama.
  • Anda tidak dapat menggunakan folder penyimpanan bersama untuk berbagi data di antara aplikasi dari penerbit yang berbeda.
  • Anda tidak dapat menggunakan folder penyimpanan bersama untuk berbagi data di antara pengguna yang berbeda.
  • Folder penyimpanan bersama tidak memiliki manajemen versi.

Jika Anda menerbitkan beberapa aplikasi dan mencari mekanisme sederhana untuk berbagi data di antaranya, maka PublisherCacheFolder adalah opsi berbasis sistem file sederhana.

SharedAccessStorageManager

SharedAccessStorageManager digunakan bersama dengan layanan Aplikasi, aktivasi protokol (misalnya, LaunchUriForResultsAsync), dll., untuk berbagi StorageFiles melalui token.

Peluncur Proses Kepercayaan Penuh

Dengan kemampuan runFullTrust , aplikasi yang dipaketkan dapat meluncurkan proses kepercayaan penuh dalam paket yang sama.

Untuk skenario di mana pembatasan paket adalah beban, atau opsi IPC kurang, aplikasi dapat menggunakan proses kepercayaan penuh sebagai proksi untuk berinteraksi dengan sistem, dan kemudian IPC dengan proses kepercayaan penuh itu sendiri melalui layanan Aplikasi atau beberapa mekanisme IPC lain yang didukung dengan baik.

LaunchUriForResultsAsync

LaunchUriForResultsAsync digunakan untuk pertukaran data sederhana (ValueSet) dengan aplikasi paket lainnya yang menerapkan kontrak aktivasi ProtocolForResults . Tidak seperti layanan Aplikasi, yang biasanya berjalan di latar belakang, aplikasi target diluncurkan di latar depan.

File dapat dibagikan dengan meneruskan token SharedStorageAccessManager ke aplikasi melalui ValueSet.

Loopback

Loopback adalah proses berkomunikasi dengan server jaringan yang mendengarkan di localhost (alamat loopback).

Untuk menjaga keamanan dan isolasi jaringan, koneksi loopback untuk IPC diblokir secara default untuk aplikasi paket. Anda dapat mengaktifkan koneksi loopback antara aplikasi paket tepercaya dengan menggunakan kemampuan dan properti manifes.

  • Semua aplikasi paket yang berpartisipasi dalam koneksi loopback perlu mendeklarasikan privateNetworkClientServer kemampuan dalam manifes paket mereka.
  • Dua aplikasi yang dikemas dapat berkomunikasi melalui loopback dengan mendeklarasikan LoopbackAccessRules dalam manifes paket mereka.
    • Setiap aplikasi harus mencantumkan yang lain dalam LoopbackAccessRules-nya. Klien menetapkan Aturan "keluar" untuk server, dan server menetapkan Aturan "masuk" untuk klien yang didukungnya.

Nota

Nama keluarga paket yang diperlukan untuk mengidentifikasi aplikasi dalam Aturan ini dapat ditemukan melalui editor manifes paket di Visual Studio selama waktu pengembangan, melalui Pusat Mitra untuk aplikasi yang diterbitkan melalui Microsoft Store, atau melalui perintah Get-AppxPackage PowerShell untuk aplikasi yang sudah diinstal.

Aplikasi dan layanan yang tidak dikemas tidak memiliki identitas paket, sehingga tidak dapat dideklarasikan dalam LoopbackAccessRules. Anda dapat mengonfigurasi aplikasi paket untuk terhubung melalui loopback dengan aplikasi dan layanan yang tidak dikemas melalui CheckNetIsolation.exe, namun ini hanya dimungkinkan untuk skenario sideload atau penelusuran kesalahan di mana Anda memiliki akses lokal ke mesin, dan Anda memiliki hak istimewa administrator.

  • Semua aplikasi paket yang berpartisipasi dalam koneksi loopback perlu mendeklarasikan privateNetworkClientServer kemampuan dalam manifes paket mereka.
  • Jika aplikasi paket tersambung ke aplikasi atau layanan yang tidak dikemas, jalankan CheckNetIsolation.exe LoopbackExempt -a -n=<PACKAGEFAMILYNAME> untuk menambahkan pengecualian loopback untuk aplikasi yang dikemas.
  • Jika aplikasi atau layanan yang tidak dikemas tersambung ke aplikasi yang dikemas, jalankan CheckNetIsolation.exe LoopbackExempt -is -n=<PACKAGEFAMILYNAME> untuk mengaktifkan aplikasi yang dikemas untuk menerima koneksi loopback masuk.
    • CheckNetIsolation.exe harus berjalan terus menerus saat aplikasi yang dikemas menunggu koneksi.
    • Bendera -is diperkenalkan di Windows 10, versi 1607 (10.0; Bangun 14393).

Nota

Nama keluarga paket yang diperlukan untuk -n bendera CheckNetIsolation.exe dapat ditemukan melalui editor manifes paket di Visual Studio selama waktu pengembangan, melalui Pusat Mitra untuk aplikasi yang diterbitkan melalui Microsoft Store, atau melalui perintah Get-AppxPackage PowerShell untuk aplikasi yang sudah diinstal.

CheckNetIsolation.exe juga berguna untuk men-debug masalah isolasi jaringan.

Pipa

Pipa memungkinkan komunikasi sederhana antara server pipa dan satu atau beberapa klien pipa.

Pipa anonim dan pipa bernama didukung dengan batasan berikut:

  • Secara default, pipa yang diberi nama dalam aplikasi yang dikemas didukung hanya untuk komunikasi antara proses di dalam paket yang sama, kecuali jika proses tersebut memiliki hak akses penuh.
  • Pipa bernama dapat dibagikan di seluruh paket mengikuti panduan untuk berbagi objek bernama.
  • Pipa bernama (dalam aplikasi yang dikemas dan yang tidak dikemas) harus menggunakan sintaksis \\.\pipe\LOCAL\ untuk nama pipanya.

Direktori

Penggunaan registri untuk IPC umumnya tidak dianjurkan, tetapi didukung untuk kode yang ada. Aplikasi paket hanya dapat mengakses kunci registri yang memiliki izin untuk diakses.

Umumnya, aplikasi desktop yang dipaketkan (lihat Membangun paket MSIX dari kode Anda) memanfaatkan virtualisasi registri sedih sehingga penulisan registri global dimuat ke sarang privat dalam paket MSIX. Ini memungkinkan kompatibilitas kode sumber sambil meminimalkan dampak registri global, dan dapat digunakan untuk IPC antara proses dalam paket yang sama. Jika Anda harus menggunakan registri, model ini lebih disukai dibandingkan memanipulasi registri global.

RPC

RPC dapat digunakan untuk menghubungkan aplikasi paket ke titik akhir Win32 RPC, asalkan aplikasi yang dikemas memiliki kemampuan yang benar untuk mencocokkan ACL pada titik akhir RPC.

Kemampuan kustom memungkinkan OEM dan IHV untuk menentukan kemampuan arbitrer, ACL titik akhir RPC mereka dengannya, lalu memberikan kemampuan tersebut ke aplikasi klien yang diotorisasi. Untuk aplikasi sampel lengkap, lihat sampel CustomCapability .

Titik akhir RPC juga dapat DIALOKASIKAN ke aplikasi paket tertentu untuk membatasi akses ke titik akhir hanya untuk aplikasi tersebut tanpa memerlukan overhead manajemen kemampuan kustom. Anda dapat menggunakan API DeriveAppContainerSidFromAppContainerName untuk mendapatkan SID dari nama keluarga paket aplikasi, kemudian mengatur ACL pada titik akhir RPC dengan SID seperti yang ditunjukkan dalam sampel CustomCapability.

Memori Bersama

Pemetaan file dapat digunakan untuk berbagi file atau memori antara dua proses atau lebih dengan batasan berikut:

  • Secara bawaan, pemetaan file dalam aplikasi yang dipaketkan hanya didukung di antara proses dalam paket yang sama, kecuali jika sebuah proses memiliki tingkat kepercayaan penuh.
  • Pemetaan file dapat dibagikan antar paket sesuai dengan panduan untuk berbagi objek bernama.

Memori bersama direkomendasikan untuk berbagi dan memanipulasi data dalam jumlah besar secara efisien.