Memahami cara aplikasi desktop yang dipaketkan berjalan di Windows

Artikel ini menyediakan penyelaman yang lebih mendalam tentang apa yang terjadi pada file dan entri registri saat Anda membuat paket aplikasi Windows untuk aplikasi desktop Anda.

Tujuan utama paket modern adalah untuk memisahkan status aplikasi dari status sistem sebanyak mungkin sambil mempertahankan kompatibilitas dengan aplikasi lain. Windows 10 menyelesaikan ini dengan menempatkan aplikasi di dalam paket MSIX, dan kemudian mendeteksi dan mengalihkan beberapa perubahan yang dilakukannya pada sistem file dan registri saat runtime.

Paket yang Anda buat untuk aplikasi desktop Anda adalah aplikasi khusus desktop, kepercayaan penuh dan tidak divirtualisasikan atau dikotakpasir. Ini memungkinkan mereka untuk berinteraksi dengan aplikasi lain dengan cara yang sama seperti aplikasi desktop klasik.

Penginstalan

Paket aplikasi diinstal per pengguna, bukan di seluruh sistem. Paket aplikasi diinstal di bawah C:\Program Files\WindowsApps\package_name, dengan executable berjudul app_name.exe. Setiap folder paket berisi manifes (bernama AppxManifest.xml) yang berisi namespace XML khusus untuk aplikasi yang dikemas. Di dalam file manifes tersebut ada elemen <EntryPoint>, yang mereferensikan aplikasi yang tepercaya penuh. Ketika aplikasi tersebut diluncurkan, aplikasi tersebut tidak berjalan di dalam kontainer aplikasi, tetapi sebaliknya berjalan sebagai pengguna seperti biasanya.

Setelah penyebaran, file paket ditandai sebagai baca-saja dan dikunci dengan ketat oleh sistem operasi. Windows mencegah aplikasi diluncurkan jika file ini dirusak.

Sistem file

Sistem operasi (OS) mendukung berbagai tingkat operasi sistem file untuk aplikasi desktop kemasan, 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 hard linking file. Saat 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, OS menyimpan file bersama pada disk hanya sekali dan membuat tautan keras dari kedua paket ke file bersama. Karena file diunduh dalam blok 64k, bahkan jika persentase file yang diunduh ada di disk, hanya kenaikan yang berbeda yang diunduh. Ini mengurangi bandwidth yang digunakan untuk mengunduh.

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

Semua file dan folder yang baru dibuat di folder AppData pengguna (misalnya, C:\Users\user_name\AppData) ditulis ke lokasi pribadi per pengguna, per aplikasi tetapi digabungkan pada runtime untuk muncul di lokasi AppData nyata. Ini memungkinkan beberapa tingkat pemisahan status untuk artefak yang hanya digunakan oleh aplikasi itu sendiri, dan ini memungkinkan sistem untuk membersihkan file-file tersebut ketika aplikasi dihapus instalannya. Modifikasi pada file yang ada di bawah folder AppData pengguna diizinkan untuk memberikan tingkat kompatibilitas dan interaktivitas yang lebih tinggi antara aplikasi dan OS. Ini mengurangi sistem file "membusuk" karena OS mengetahui setiap perubahan file atau direktori yang dilakukan oleh aplikasi. Pemisahan status juga memungkinkan aplikasi desktop kemasan untuk mengambil di mana versi non-paket dari aplikasi yang sama ditinggalkan. Perhatikan bahwa OS tidak mendukung folder sistem file virtual (VFS) untuk folder AppData pengguna.

Operasi AppData pada Windows 10, versi 1809 dan yang lebih lama

Semua penulisan ke folder AppData pengguna (misalnya, C:\Users\user_name\AppData), termasuk membuat, menghapus, dan memperbarui, disalin saat menulis ke lokasi pribadi per pengguna, per aplikasi. Ini menciptakan ilusi bahwa aplikasi yang dipaketkan mengedit AppData nyata ketika benar-benar memodifikasi salinan privat. Dengan mengalihkan penulisan dengan cara ini, sistem dapat melacak semua modifikasi file yang dibuat oleh aplikasi. Ini memungkinkan sistem untuk membersihkan file-file tersebut ketika aplikasi dihapus instalannya, sehingga mengurangi sistem "membusuk" dan memberikan pengalaman penghapusan aplikasi yang lebih baik bagi pengguna.

Direktori kerja, dan file aplikasi

Selain mengalihkan AppData, folder terkenal Windows (System32, Program Files (x86), dll.) digabungkan secara dinamis dengan direktori yang sesuai dalam paket aplikasi. Setiap paket berisi folder bernama "VFS" di akarnya. Setiap pembacaan direktori atau file di direktori VFS digabungkan pada runtime dengan rekan asli masing-masing. Misalnya, aplikasi dapat berisi C:\Program Files\WindowsApps\package_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 hidup di lokasi non-paket.

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

Operasi umum

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

Operasi Hasil Contoh
Membaca atau menghitung file atau folder Windows terkenal Penggabungan dinamis C:\Program Files\package_name\VFS\well_known_folder dengan rekan sistem lokal. Membaca C:\Windows\System32 mengembalikan konten C:\Windows\System32 ditambah isi C:\Program Files\WindowsApps\package_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
  • Lokal\Microsoft
  • Roaming
  • Roaming\Microsoft
  • Roaming\Microsoft\Windows\Start Menu\Programs
Menanggapi perintah buka file, OS akan membuka file dari lokasi per pengguna per paket terlebih dahulu. Jika lokasi ini tidak ada, OS akan mencoba membuka file dari lokasi AppData nyata. Jika file dibuka dari lokasi AppData nyata, tidak ada virtualisasi untuk file tersebut yang terjadi. Penghapusan file di bawah AppData diizinkan jika pengguna memiliki izin.

Windows 10, versi 1809 dan yang lebih lama: Copy-on-written 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_name tidak diperbolehkan.
Menulis 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_name\VFS\SystemX86\foo.dll dan pengguna memiliki izin.

Lokasi VFS kemasan

Tabel berikut menunjukkan tempat pengiriman file sebagai bagian dari paket Anda dilapisi pada sistem untuk aplikasi. Aplikasi Anda akan menganggap file-file ini berada di lokasi sistem yang tercantum, padahal sebenarnya file tersebut berada di lokasi yang dialihkan di dalam C:\Program Files\WindowsApps\package_name\VFS. Lokasi FOLDERID berasal dari konstanta KNOWNFOLDERID .

Lokasi Sistem Lokasi yang Dialihkan (di bawah [PackageRoot]\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 AppData Umum 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

Paket aplikasi berisi file registry.dat, yang berfungsi sebagai setara logis HKLM\Software dalam registri nyata. Pada runtime, registri virtual ini menggabungkan konten sarang ini ke dalam sarang sistem asli untuk memberikan tampilan tunggal dari 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 ditulis ke lokasi pribadi per pengguna per aplikasi. Secara tradisional, pencabut pemasangan tidak dapat membersihkan HKEY_CURRENT_USER karena data registri untuk pengguna yang keluar tidak dipasang dan tidak tersedia.

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

Operasi umum

Tabel referensi singkat ini memperlihatkan 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," pada runtime baca HKLM\Software akan menampilkan konten HKLM\Software plus HKLM\Software\Foo.
Menulis di bawah HKCU Salin-tulis ke lokasi privat per pengguna per aplikasi. Sama seperti AppData untuk file.
Menulis di dalam paket. Tidak diperbolehkan. Paket bersifat baca-saja. Penulisan 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. Penulisan di bawah HKLM\Software diizinkan selama kunci/nilai yang sesuai tidak ada di sarang paket dan pengguna memiliki izin akses yang benar.

Hapus instalasi

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