Flexibilní virtualizace

Přehled

Flexibilní funkce virtualizace poskytuje vaší aplikaci způsob, jak deklarovat, že některé soubory a položky registru by měly být viditelné pro jiné aplikace; a že ty by se měly zachovat při odinstalaci aplikace. Všechny ostatní soubory a položky registru nejsou viditelné pro ostatní aplikace; a jsou odebrány při odinstalaci.

Řízení virtualizace vybraných umístění

Poznámka:

Chování popsané v této části bylo zavedeno ve Windows 11.

Počínaje Windows 11 systém zachovává stávající chování funkce s omezeným přístupem unvirtualizedResources a vlastnosti RegistryWriteVirtualization a FilesystemWriteVirtualization. Kromě toho systém přidá pro vaši aplikaci možnost deklarovat konkrétní složky nebo klíče registru, které chcete zrušit.

  • Můžete deklarovat pouze umístění systému souborů, která jsou uvnitř %USERPROFILE%\AppData.
  • Můžete deklarovat pouze umístění registru, která jsou v HKCU.

Tady je příklad.

<!-- 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 11 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>

Poznámka:

Pokud vaše aplikace deklaruje syntaxi před Windows 11 i Windows 11, použije se stará deklarace ve verzích před Windows 11, zatímco nová deklarace se použije v před Windows 11 a novějších verzích.

Mechanismy před Windows 11

V tradičních prostředích můžou aplikace vytvářet, aktualizovat a odstraňovat soubory na většině míst v systému souborů. A mohou vytvářet, aktualizovat a odstraňovat položky v registru Systému Windows. Tyto soubory a položky registru jsou viditelné pro jiné aplikace v systému, i když často nemusí být. Kromě toho, když je aplikace odinstalována, tyto soubory a položky registru jsou často ponechány za sebou a stávají se nepotřebnými.

V univerzální platformě Windows (UPW) se takové soubory a položky registru virtualizují, aby je viděla jenom aplikace, která je zapisuje. A po odinstalaci aplikace se odeberou. Existují ale platné scénáře, kdy aplikace chce, aby tyto soubory a položky registru byly viditelné pro jiné aplikace. Kromě toho můžou jiné aplikace vyžadovat, aby tyto soubory a položky zůstaly trvalé i po odinstalaci aplikace, která je napsala.

Výchozí chování MSIX

Umístění Kontext Popis
HKCU Doba instalace
  • Aplikace může obsahovat user.dat soubor, který určuje položky HKCU\Software. Tyto položky se ve skutečnosti zapisují do user.dat souboru ve složce AppData uživatele (v podsložce pro každou aplikaci) a předávají se aplikaci, jako by klíče byly v HKCU.
  • Pro čtení se tento privátní podregistr sloučí s nevirtualizovaným HKCU\Software tak, aby se všechny položky jevily jako na stejném místě.
  • Když se aplikace odinstaluje, virtualizované položky už nejsou k dispozici, protože se do registru nikdy nepřidaly.
  • Klíče ve virtualizovaném stromu registru jsou viditelné pouze pro aplikaci.
HKCU Doba běhu
  • Zápisy se ukládají do samostatného soukromého podregistru pro každou aplikaci a uživatele.
  • Při čtení se tento podregistr sloučí s nevirtualizovaným HKCU, aby se všechny položky objevily na stejném místě.
  • Po odinstalaci aplikace se odeberou virtualizované položky.
  • Klíče ve virtualizovaném úlu jsou viditelné pouze pro aplikaci.
HKLM Doba instalace
  • Aplikace může obsahovat registry.dat soubor, který určuje HKLM\položky v Software. Tyto položky se ve skutečnosti zapisují do user.dat souboru ve složce AppData uživatele (v podsložce pro každou aplikaci) a předávají se aplikaci, jako by klíče byly v HKLM.
  • Pro čtení se tento privátní podregistr sloučí s nevirtualizovaným HKLM\Software, aby se všechny položky nacházely na stejném místě.
  • Když se aplikace odinstaluje, virtualizované položky už nejsou k dispozici, protože se do registru nikdy nepřidaly.
  • Klíče ve virtualizovaném stromu registru jsou viditelné pouze pro aplikaci.
HKLM Doba běhu
  • Zápisy v HKLM jsou povolené, pokud v podregistru balíčku neexistuje odpovídající klíč nebo hodnota a uživatel má správná přístupová oprávnění (což znamená, že je k dispozici pouze pro aplikaci Centennial se zvýšenými oprávněními).
Známé složky Doba instalace
  • Aplikace může obsahovat složku VFS s dobře známými pojmenovanými podsložkami, které obsahují libovolné soubory.
  • Pro čtení se tyto podsložky sloučí s nevirtualizovanými dobře známými umístěními, aby všechny soubory se zobrazovaly, jako by byly na stejném místě.
AppData Doba běhu
  • Ve verzích Windows, které jsou menší nebo rovny 1809, se všechny zápisy do složky AppData uživatele (včetně vytvoření, odstranění a aktualizace) zkopírují do soukromého umístění pro jednotlivé uživatele a aplikace, které se sloučí za běhu, aby se zobrazily v reálném umístění AppData .
  • Ve verzích Windows větších než 1809 se všechny nově vytvořené soubory a složky ve složce AppData uživatele zapisují do soukromého umístění pro jednotlivé uživatele a aplikace, které se sloučí za běhu, aby se zobrazily v reálném umístění AppData . Změny existujících souborů AppData se provádějí u nevirtualizovaných souborů. Při čtení se systém nejprve pokusí o privátní umístění a pak se vrátí zpět na nevirtualizované AppData.
  • Na záložní straně jsou povoleny zápisy do nevirtualizovaných souborů.
  • Po odinstalaci aplikace se odeberou virtualizované položky.
  • Soubory ve virtualizovaném umístění jsou viditelné jenom pro aplikaci.
  • Pro AppData neexistuje žádná podpora VFS.
  • Kromě AppData může aplikace zapisovat do libovolného umístění, kde má uživatel přístup k zápisu, včetně dalších částí %userprofile% (z nichž AppData je jen jedna část).

Omezená unvirtualizedResources schopnost

Poznámka:

unvirtualizedResources Podpora omezené schopnosti byla zavedena ve Windows 10 verze 1903 (10.0; Build 18362), označovaný také jako Aktualizace Windows 10 z května 2019.

Aplikace může deklarovat unvirtualizedResources omezenou schopnost a nastavit vlastnosti RegistryWriteVirtualization a/nebo FilesystemWriteVirtualization tak, aby truezískala přístup k zápisu do HKCU a/nebo AppData. To umožňuje případ, kdy vaše aplikace potřebuje zapisovat položky, které jsou pak viditelné pro jiné procesy mimo jeho balíček. Například hry zapisují data do AppData a tato data se musí uchovávat i po odinstalaci hry.

Vlastnictví Popis
RegistryWriteVirtualization=vypnuto Zápisy do HKCU přejdou do nevirtualizovaného umístění, jsou viditelné pro jiné procesy mimo balíček a nejsou vyčištěny při odinstalaci aplikace.
FilesystemWriteVirtualization=zakázáno Zápisy do AppData přejdou do nevirtualizovaného umístění, jsou viditelné pro jiné procesy mimo balíček a nejsou vyčištěny při odinstalaci aplikace.

Tento mechanismus zcela vypne virtualizaci HKCU a/nebo AppData, což je proti hlavnímu cíli. Nejedná se o jemně odstupňovaný nástroj a často překračuje požadavky dané aplikace.