Virtualisasi fleksibel

Gambaran Umum

Fitur virtualisasi fleksibel menyediakan cara bagi aplikasi Anda untuk menyatakan bahwa beberapa set file dan entri Registrinya harus terlihat oleh aplikasi lain; dan bahwa itu harus bertahan pada penghapusan instalasi aplikasi. Semua file lain dan entri Registri tidak terlihat oleh aplikasi lain; dan dihapus saat dihapus instalasinya.

Cara mengontrol virtualisasi lokasi yang dipilih

Catatan

Perilaku yang dijelaskan di bagian ini diperkenalkan di Windows 10, versi 21H1.

Mulai dari Windows 10, versi 21H1, sistem mempertahankan perilaku kemampuan terbatas UnvirtualizedResources yang ada, dan properti RegistryWriteVirtualization dan FilesystemWriteVirtualization. Selain itu, sistem menambahkan kemampuan aplikasi Anda untuk mendeklarasikan folder dan/atau kunci Registri tertentu yang ingin Anda batalkan registrinya.

  • Anda hanya dapat mendeklarasikan lokasi sistem file yang berada di dalam %USERPROFILE%\AppData.
  • Anda hanya dapat mendeklarasikan lokasi Registri yang berada dalam HKCU.

Berikut adalah contoh.

<!-- Declare the desktop6 and/or virtualization XML namespace where the virtualization properties are defined, and include this in the list of ignorable namespaces. -->
<!-- Declare the XML namespace for the required restricted capability, and include it in the list of ignorable namespaces. -->
<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:desktop6="http://schemas.microsoft.com/appx/manifest/desktop/windows10/6"
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  xmlns:virtualization="http://schemas.microsoft.com/appx/manifest/virtualization/windows10"
  IgnorableNamespaces="rescap desktop6 virtualization">

  <!-- ... -->
  <!-- Other entries omitted for brevity. -->
  <!-- ... -->

  <Properties>
    <!-- If you don't want virtualization of registry writes to HKEY_CURRENT_USER, then include the property, and set it to disabled. -->
    <desktop6:RegistryWriteVirtualization>disabled</desktop6:RegistryWriteVirtualization>

    <!-- If you don't want virtualization of file system writes to the user's AppData folder, then include the property, and set it to disabled. -->
    <desktop6:FileSystemWriteVirtualization>disabled</desktop6:FileSystemWriteVirtualization>
    
    <!-- On Windows 10, version 21H1 and later OS versions, you can declare specific file system and/or registry locations that you want to be unvirtualized. 
    If these are recognized on the current device, then they take precedence over the old declarations. On older devices,
    the new declarations are ignored and the old ones are honored. -->
    <virtualization:FileSystemWriteVirtualization>
      <virtualization:ExcludedDirectories>
        <virtualization:ExcludedDirectory>$(KnownFolder:LocalAppData)\Fabrikam\Widgets</virtualization:ExcludedDirectory>
        <virtualization:ExcludedDirectory>$(KnownFolder:RoamingAppData)\Fabrikam\Widgets</virtualization:ExcludedDirectory>
      </virtualization:ExcludedDirectories>
    </virtualization:FileSystemWriteVirtualization>

    <virtualization:RegistryWriteVirtualization>
      <virtualization:ExcludedKeys>
        <virtualization:ExcludedKey>HKEY_CURRENT_USER\Software\Fabrikam\Widgets</virtualization:ExcludedKey>
      </virtualization:ExcludedKeys>
    </virtualization:RegistryWriteVirtualization>
  </Properties>

  <Capabilities>
    <!-- Include the required restricted capability. -->
    <rescap:Capability Name="unvirtualizedResources"/>
  </Capabilities>
</Package>

Catatan

Jika aplikasi Anda mendeklarasikan sintaks pra-Windows 10, versi 21H1, dan Windows 10, versi 21H1, maka deklarasi lama akan digunakan pada versi pra-Windows 10, versi 21H1, sementara deklarasi baru akan digunakan pada pra-Windows 10, versi 21H1, dan yang lebih baru.

Mekanisme sebelum Windows 10, versi 21H1

Di lingkungan tradisional, aplikasi dapat membuat, memperbarui, dan menghapus file di sebagian besar tempat dalam sistem file. Dan mereka dapat membuat, memperbarui, dan menghapus entri di Windows Registry. File dan entri Registri tersebut terlihat oleh aplikasi lain di sistem, meskipun sering kali tidak perlu. Selain itu, ketika aplikasi dihapus instalasinya, file dan entri Registri tersebut sering ditinggalkan, dan menjadi berantakan.

Dalam Platform Windows Universal (UWP), file dan entri Registri tersebut divirtualisasi sehingga hanya aplikasi yang menulisnya yang dapat melihatnya. Dan dihapus saat aplikasi dihapus instalannya. Tetapi ada skenario yang valid di mana aplikasi ingin file dan entri Registri tersebut terlihat oleh aplikasi lain. Selain itu, aplikasi lain mungkin mengharuskan file dan entri tersebut bertahan bahkan setelah aplikasi yang menulisnya dihapus instalasinya.

Perilaku MSIX default

Lokasi Konteks Deskripsi
HKCU Waktu penginstalan
  • Aplikasi ini dapat menyertakan user.dat file yang menentukan entri Perangkat Lunak HKCU\. Entri ini benar-benar ditulis ke user.dat file di folder AppData pengguna (di sub-folder untuk setiap aplikasi), dan disajikan ke aplikasi seolah-olah kunci berada di HKCU.
  • Untuk membaca, sarang privat ini digabungkan dengan Perangkat Lunak HKCU\yang tidak divirtualisasi sehingga semua entri tampaknya berada di tempat yang sama.
  • Ketika aplikasi dihapus, entri virtual tidak lagi tersedia, karena mereka tidak pernah benar-benar ditambahkan ke registri.
  • Kunci di sarang virtual hanya terlihat oleh aplikasi.
HKCU Run-time
  • Tulisan masuk ke sarang privat per aplikasi per pengguna yang terpisah.
  • Untuk membaca, sarang ini digabungkan dengan HKCU yang tidak divirtualisasi sehingga semua entri tampaknya berada di tempat yang sama.
  • Saat aplikasi dihapus instalasinya, entri virtual akan dihapus.
  • Kunci di sarang virtual hanya terlihat oleh aplikasi.
HKLM Waktu penginstalan
  • Aplikasi ini dapat menyertakan registry.dat file yang menentukan entri Perangkat Lunak HKLM\. Entri ini benar-benar ditulis ke user.dat file di folder AppData pengguna (dalam sub-folder untuk setiap aplikasi), dan disajikan ke aplikasi seolah-olah kunci berada di HKLM.
  • Untuk membaca, sarang privat ini digabungkan dengan Perangkat Lunak HKLM\yang tidak tervirtualisasi sehingga semua entri tampaknya berada di tempat yang sama.
  • Ketika aplikasi dihapus, entri virtual tidak lagi tersedia, karena mereka tidak pernah benar-benar ditambahkan ke registri.
  • Kunci di sarang virtual hanya terlihat oleh aplikasi.
HKLM Run-time
  • Penulisan di bawah HKLM diizinkan selama kunci/nilai yang sesuai tidak ada di sarang paket dan pengguna memiliki izin akses yang benar (yang secara efektif berarti ini hanya tersedia untuk aplikasi Centennial yang berjalan ditingkatkan).
Folder terkenal Waktu penginstalan
  • Aplikasi ini dapat menyertakan folder VFS dengan subfolder bernama terkenal yang berisi file arbitrer.
  • Untuk membaca, subfolder ini digabungkan dengan lokasi terkenal yang tidak tervirtualisasi, sehingga semua file tampaknya berada di tempat yang sama.
AppData Run-time
  • Untuk versi Windows kurang dari atau sama dengan 1809, semua penulisan ke folder AppData pengguna (termasuk buat, hapus, dan perbarui) disalin saat menulis ke lokasi pribadi per pengguna, per aplikasi, yang digabungkan pada run-time untuk muncul di lokasi AppData nyata.
  • Untuk versi Windows yang lebih besar dari 1809, semua file dan folder yang baru dibuat di folder AppData pengguna ditulis ke lokasi pribadi per pengguna per aplikasi yang digabungkan pada run-time untuk muncul di lokasi AppData nyata. Modifikasi pada file AppData yang ada dilakukan pada file yang tidak divirtualisasi. Untuk pembacaan, sistem mencoba lokasi privat terlebih dahulu, lalu kembali ke AppData yang tidak divirtualisasi.
  • Pada fallback, menulis ke file yang tidak divirtualisasi diizinkan.
  • Saat aplikasi dihapus instalasinya, entri virtual akan dihapus.
  • File di lokasi virtual hanya terlihat oleh aplikasi.
  • Tidak ada dukungan VFS untuk AppData.
  • Selain AppData, aplikasi dapat menulis ke lokasi mana pun di mana pengguna memiliki akses tulis, termasuk bagian lain dari %userprofile% (di mana AppData hanya satu bagian).

Kemampuan unvirtualizedResources terbatas

Catatan

Dukungan untuk unvirtualizedResources kemampuan terbatas diperkenalkan di Windows 10, versi 1903 (10.0; Build 18362), juga dikenal sebagai Pembaruan Windows 10 Mei 2019.

Aplikasi Anda dapat mendeklarasikan unvirtualizedResources kemampuan terbatas, dan mengatur properti RegistryWriteVirtualization dan/atau FilesystemWriteVirtualization ke true, untuk mendapatkan akses tulis ke HKCU dan/atau ke AppData. Ini untuk mengaktifkan kasus di mana aplikasi Anda perlu menulis entri yang kemudian terlihat oleh proses lain di luar paketnya. Misalnya, game menulis menyimpan data ke AppData, dan data tersebut perlu bertahan bahkan setelah game dihapus instalasinya.

Properti Deskripsi
RegistryWriteVirtualization=disabled Menulis ke HKCU masuk ke lokasi yang tidak divirtualisasi, terlihat oleh proses lain di luar paket, dan tidak dibersihkan pada penghapusan instalasi aplikasi.
FilesystemWriteVirtualization=disabled Menulis ke AppData masuk ke lokasi yang tidak divirtualisasi, terlihat oleh proses lain di luar paket, dan tidak dibersihkan pada penghapusan instalasi aplikasi.

Mekanisme ini mematikan virtualisasi HKCU dan/atau AppData sama sekali, yang bertentangan dengan tujuan utama. Ini bukan alat berbahan halus, dan sering melebihi persyaratan aplikasi tertentu.