Memahami cara aplikasi desktop kemasan berjalan di Windows

Topik ini menjelaskan jenis aplikasi desktop yang dapat Anda buat paket aplikasi Windows, bersama dengan beberapa perilaku sistem operasi (OS) —dan spesifikasi lainnya—yang penting untuk diperhatikan. Kita akan membahas detail item berikut (seperti yang akan kita lihat, perilaku spesifik tergantung pada jenis aplikasi Anda):

Jenis aplikasi desktop

Ada dua jenis aplikasi desktop yang dapat Anda buat dan paketkan. Anda mendeklarasikan jenis aplikasi Anda dalam manifes paket aplikasinya dengan menggunakan atribut uap10:RuntimeBehavior dari elemen Aplikasi :

  • Satu jenis mencakup aplikasi WinUI 3 (yang menggunakan aplikasi SDK Aplikasi Windows) dan Desktop Bridge (Centennial). Dideklarasikan dengan uap10:RuntimeBehavior="packagedClassicApp".
  • Jenis lainnya mewakili jenis aplikasi Win32 lainnya, termasuk aplikasi yang dipaketkan dengan lokasi eksternal. Dideklarasikan dengan uap10:RuntimeBehavior="win32App".

aplikasi Platform Windows Universal (UWP) (uap10:RuntimeBehavior="windowsApp") juga dimas; tetapi topik ini bukan tentang mereka.

Dan kemudian atribut uap10:TrustLevel (dari elemen Aplikasi yang sama) menentukan apakah proses aplikasi paket Anda berjalan di dalam kontainer aplikasi atau tidak.

  • Aplikasi kepercayaan penuh. Dideklarasikan dengan uap10:TrustLevel="mediumIL".
  • Aplikasi appContainer . Dideklarasikan dengan uap10:TrustLevel="appContainer". Berjalan dalam kontainer aplikasi ringan (dan karenanya diisolasi menggunakan sistem file dan virtualisasi registri). Untuk informasi selengkapnya, lihat Aplikasi MSIX appContainer.

Penting

Untuk detail selengkapnya, dependensi, dan persyaratan kemampuan, lihat dokumentasi untuk dua atribut tersebut di Aplikasi. Lihat juga uap10 diperkenalkan di Windows 10, versi 2004 (10.0; Bangun 19041).

Tujuan pengemasan, dan kontainer aplikasi

Tujuan pengemasan aplikasi Anda adalah untuk memberikannya identitas paket saat runtime. Identitas paket diperlukan untuk fitur Windows tertentu (lihat Fitur yang memerlukan identitas paket). Anda dapat mengemas semua kombinasi jenis aplikasi yang dijelaskan di atas (dan dengan demikian mendapat manfaat dari identitas paket).

Tetapi tujuan utama aplikasi appContainer adalah untuk memisahkan status aplikasi dari status sistem sebanyak mungkin, sambil mempertahankan kompatibilitas dengan aplikasi lain. Windows menyelesaikannya dengan mendeteksi dan mengalihkan perubahan tertentu yang dilakukannya pada sistem file dan registri saat runtime (dikenal sebagai virtualisasi). Kami akan memanggil saat bagian hanya berlaku untuk aplikasi virtual.

Penginstalan

Paket aplikasi diinstal per pengguna, bukan di seluruh sistem. Lokasi default untuk paket baru pada komputer baru berada di bawah C:\Program Files\WindowsApps\<package_full_name>, dengan executable bernama app_name.exe. Tetapi paket dapat diinstal di tempat lain; misalnya, perintah Mulai Visual Studio menggunakan proyek $(OutDir).

Setelah penyebaran, file paket ditandai baca-saja, dan sangat dikunci oleh sistem operasi (OS). Windows mencegah aplikasi diluncurkan jika file tersebut dirusak.

Lokasi C:\Program Files\WindowsApps adalah apa yang dikenal sebagai PackageVolume. Lokasi tersebut adalah PackageVolume default yang dikirim Windows; tetapi Anda dapat membuat PackageVolume di drive apa pun, dan di jalur apa pun. Selain itu, tidak semua paket diinstal dalam PackageVolume (lihat contoh Visual Studio di atas).

Sistem file

OS mendukung berbagai tingkat operasi sistem file untuk aplikasi desktop paket, tergantung pada lokasi folder.

Dioptimalkan untuk perangkat Anda

Untuk menghindari duplikasi file (untuk mengoptimalkan ruang penyimpanan disk dan mengurangi bandwidth yang diperlukan saat mengunduh file), OS memanfaatkan penyimpanan tunggal dan penautan file secara permanen. Ketika pengguna mengunduh paket MSIX, AppxManifest.xml digunakan untuk menentukan apakah data yang terkandung dengan paket sudah ada pada disk dari penginstalan paket sebelumnya. Jika file yang sama ada di beberapa paket MSIX, MAKA OS menyimpan file bersama pada disk sekali saja, dan membuat tautan keras dari kedua paket ke file bersama. Karena file diunduh dalam blok 64Kb, bahkan jika persentase file yang diunduh ada di disk, hanya kenaikan yang berbeda yang diunduh. Itu mengurangi bandwidth yang digunakan untuk mengunduh.

Operasi AppData pada Windows 10, versi 1903 dan yang lebih baru

Bagian ini hanya berlaku untuk aplikasi virtual.

Semua file dan folder yang baru dibuat di folder pengguna AppData (misalnya, C:\Users\<user_name>\AppData) ditulis ke lokasi pribadi per pengguna, per aplikasi; tetapi digabungkan pada runtime untuk muncul di lokasi nyata AppData . Itu memungkinkan beberapa tingkat pemisahan status untuk artefak yang hanya digunakan oleh aplikasi itu sendiri; yang memungkinkan sistem untuk membersihkan file-file tersebut saat aplikasi dihapus instalasinya.

Modifikasi pada file yang ada di bawah folder pengguna AppData diizinkan untuk memberikan tingkat kompatibilitas dan interaktivitas yang lebih tinggi antara aplikasi dan OS. Itu mengurangi "membusuk" sistem karena OS mengetahui setiap perubahan file atau direktori yang dibuat oleh aplikasi. Pemisahan status juga memungkinkan aplikasi desktop paket untuk mengambil di mana versi yang tidak dikemas dari aplikasi yang sama ditinggalkan. Perhatikan bahwa OS tidak mendukung folder sistem file virtual (VFS) untuk folder pengguna AppData .

Operasi AppData pada OS yang lebih lama dari Windows 10, versi 1903

Bagian ini hanya berlaku untuk aplikasi virtual.

Semua penulisan ke folder pengguna AppData (misalnya, C:\Users\<user_name>\AppData)—termasuk buat, hapus, dan perbarui—disalin saat menulis ke lokasi pribadi per pengguna, per aplikasi. Itu membuat ilusi bahwa aplikasi paket mengedit yang nyata AppData ketika benar-benar memodifikasi salinan privat. Dengan mengalihkan penulisan dengan cara itu, sistem dapat melacak semua modifikasi file yang dibuat oleh aplikasi. Itu memungkinkan sistem untuk membersihkan file-file tersebut ketika aplikasi dihapus instalannya, sehingga mengurangi "busuk" sistem, dan memberikan pengalaman penghapusan aplikasi yang lebih baik bagi pengguna.

Direktori kerja, dan file aplikasi

Bagian ini hanya berlaku untuk aplikasi virtual.

Selain mengalihkan AppData, folder terkenal Windows (System32, , Program Files (x86)dll.) secara dinamis digabungkan dengan direktori yang sesuai dalam paket aplikasi. Setiap paket berisi folder bernama VFS di akarnya. Setiap pembacaan direktori atau file dalam direktori digabungkan VFS pada runtime dengan rekan asli masing-masing. Misalnya, aplikasi dapat berisi C:\Program Files\WindowsApps\<package_full_name>\VFS\SystemX86\vc10.dll sebagai bagian dari paket aplikasinya, tetapi file akan tampak diinstal di C:\Windows\System32\vc10.dll. Itu mempertahankan kompatibilitas dengan aplikasi desktop yang mengharapkan file untuk tinggal di lokasi non-paket.

Menulis ke file/folder dalam paket aplikasi tidak diperbolehkan. Menulis ke file dan folder yang bukan bagian dari paket diabaikan oleh OS, dan diizinkan selama pengguna memiliki izin.

Operasi sistem file umum

Tabel referensi singkat ini memperlihatkan operasi sistem file umum dan bagaimana OS menanganinya.

Operasi Hasil Contoh
Membaca atau menghitung file atau folder Windows terkenal Penggabungan C:\Program Files\<package_full_name>\VFS\<well_known_folder> dinamis dengan rekan sistem lokal. Membaca C:\Windows\System32 mengembalikan konten C:\Windows\System32 ditambah isi C:\Program Files\WindowsApps\<package_full_name>\VFS\SystemX86.
Tulis di bawah AppData Windows 10, versi 1903 dan yang lebih baru: File dan folder baru yang dibuat di bawah direktori berikut dialihkan ke lokasi privat per pengguna per paket:
  • Lokal
  • Local\Microsoft
  • Roaming
  • Roaming\Microsoft
  • Roaming\Microsoft\Windows\Start Menu\Programs
Sebagai respons terhadap perintah buka file, OS akan membuka file dari lokasi per pengguna per paket terlebih dahulu. Jika lokasi tersebut tidak ada, maka OS akan mencoba membuka file dari lokasi nyata AppData . Jika file dibuka dari lokasi nyata AppData , maka tidak ada virtualisasi untuk file tersebut yang terjadi. Penghapusan file di bawah AppData diizinkan jika pengguna memiliki izin.

Lebih lama dari Windows 10, versi 1903: Salin saat menulis ke lokasi per pengguna per aplikasi.

AppData biasanya C:\Users\<user_name>\AppData.
Tulis di dalam paket Tidak diperbolehkan. Paket bersifat baca-saja. Penulisan di bawah C:\Program Files\WindowsApps\<package_full_name> tidak diperbolehkan.
Tulis di luar paket Diizinkan jika pengguna memiliki izin. Tulis ke C:\Windows\System32\foo.dll diperbolehkan jika paket tidak berisi C:\Program Files\WindowsApps\<package_full_name>\VFS\SystemX86\foo.dll, dan pengguna memiliki izin.

Lokasi VFS kemasan

Bagian ini hanya berlaku untuk aplikasi virtual.

Tabel ini menunjukkan di mana file yang dikirim sebagai bagian dari paket Anda dilapisi pada sistem untuk aplikasi. Aplikasi Anda akan melihat file-file ini berada di lokasi sistem yang tercantum ketika sebenarnya mereka berada di lokasi yang dialihkan di dalam C:\Program Files\WindowsApps\<package_full_name>\VFS. Lokasi FOLDERID berasal dari konstanta KNOWNFOLDERID .

Lokasi sistem Lokasi yang dialihkan (Di bawah [<package_root>]\VFS) Valid pada arsitektur
FOLDERID_SystemX86 SystemX86 x86, amd64
FOLDERID_System SystemX64 amd64
FOLDERID_ProgramFilesX86 ProgramFilesX86 x86, amd6
FOLDERID_ProgramFilesX64 ProgramFilesX64 amd64
FOLDERID_ProgramFilesCommonX86 ProgramFilesCommonX86 x86, amd64
FOLDERID_ProgramFilesCommonX64 ProgramFilesCommonX64 amd64
FOLDERID_Windows Windows x86, amd64
FOLDERID_ProgramData Umum AppData x86, amd64
FOLDERID_System\catroot AppVSystem32Catroot x86, amd64
FOLDERID_System\catroot2 AppVSystem32Catroot2 x86, amd64
FOLDERID_System\drivers\etc AppVSystem32DriversEtc x86, amd64
FOLDERID_System\driverstore AppVSystem32Driverstore x86, amd64
FOLDERID_System\logfiles AppVSystem32Logfiles x86, amd64
FOLDERID_System\spool AppVSystem32Spool x86, amd64

Registri

Bagian ini (dan sub-bagiannya) hanya berlaku untuk aplikasi virtual.

Paket aplikasi berisi registry.dat file, yang berfungsi sebagai logis (virtual) yang setara dengan HKLM\Software di registri nyata. Pada runtime, registri virtual menggabungkan konten sarang tersebut ke dalam sarang sistem asli untuk memberikan satu tampilan keduanya. Misalnya, jika registry.dat berisi satu kunci Foo, maka bacaan HKLM\Software pada runtime juga akan tampak berisi Foo (selain semua kunci sistem asli).

Meskipun paket MSIX mencakup kunci HKLM dan HKCU , paket tersebut diperlakukan secara berbeda. Hanya kunci di bawah HKLM\Software yang merupakan bagian dari paket; kunci di bawah HKCU atau bagian lain dari registri tidak. Menulis ke kunci atau nilai dalam paket tidak diperbolehkan. Menulis ke kunci atau nilai yang bukan bagian dari paket diizinkan selama pengguna memiliki izin.

Semua penulisan di bawah HKCU disalin saat menulis ke lokasi pribadi per pengguna per aplikasi. Secara tradisional, uninstaller tidak dapat membersihkan HKEY_CURRENT_USER karena data registri untuk pengguna yang log-out dilepas dan tidak tersedia.

Semua tulisan disimpan selama peningkatan paket, dan dihapus hanya ketika aplikasi dihapus sepenuhnya.

Operasi registri umum

Sebagian besar bagian ini hanya berlaku untuk aplikasi virtual.

Tabel referensi singkat ini menunjukkan operasi registri umum dan cara OS menanganinya.

Operasi Hasil Contoh
Membaca atau menghitung HKLM\Software Penggabungan dinamis sarang paket dengan rekan sistem lokal. Jika registry.dat berisi satu kunci Foo, maka pada runtime baca HKLM\Software menunjukkan konten HKLM\Software dan HKLM\Software\Foo.
Menulis di bawah HKCU Disalin saat menulis ke lokasi privat per pengguna per aplikasi. Sama seperti AppData untuk file.
Menulis di dalam paket. Tidak diperbolehkan. Paket bersifat baca-saja. Menulis di bawah HKLM\Software tidak diizinkan jika kunci/nilai yang sesuai ada di sarang paket.
Menulis di luar paket Diabaikan oleh OS. Diizinkan jika pengguna memiliki izin. Menulis di bawah HKLM\Software diizinkan selama kunci/nilai yang sesuai tidak ada di sarang paket, dan pengguna memiliki izin akses yang benar.

Menghapus Instalan

Bagian ini hanya berlaku untuk aplikasi virtual.

Ketika paket dihapus instalannya oleh pengguna, semua file dan folder yang terletak di bawah C:\Program Files\WindowsApps\<package_full_name> dihapus, serta setiap penulisan yang dialihkan ke AppData atau registri yang diambil selama proses pengemasan.