Udostępnij za pośrednictwem


Elastyczna wirtualizacja

Przegląd

Funkcja elastycznej wirtualizacji umożliwia aplikacji zadeklarowanie, że niektóre pliki i wpisy rejestru powinny być widoczne dla innych aplikacji; i że te powinny być utrwalane podczas odinstalowywania aplikacji. Wszystkie inne pliki i wpisy rejestru nie są widoczne dla innych aplikacji; i są usuwane po odinstalowaniu.

Jak kontrolować wirtualizację wybranych lokalizacji

Uwaga / Notatka

Zachowanie opisane w tej sekcji zostało wprowadzone w systemie Windows 10 w wersji 21H1.

Począwszy od systemu Windows 10 w wersji 21H1, system zachowuje istniejące zachowanie niewirtualizowanych zasobów z ograniczeniami oraz właściwości RegistryWriteVirtualization i FilesystemWriteVirtualization. Ponadto system dodaje możliwość deklarowania określonych folderów i/lub kluczy rejestru, które mają być niezawirtualizowane.

  • Można zadeklarować tylko lokalizacje systemu plików znajdujące się w %USERPROFILE%\AppData.
  • Można zadeklarować tylko lokalizacje rejestru znajdujące się w infrastrukturze HKCU.

Oto przykład.

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

Uwaga / Notatka

Jeśli Twoja aplikacja deklaruje zarówno składnię dla wersji wcześniejszych niż Windows 10, wersja 21H1, jak i dla Windows 10, wersja 21H1, to stara deklaracja będzie używana w wersjach wcześniejszych niż Windows 10, wersja 21H1, podczas gdy nowa deklaracja będzie używana w wersjach Windows 10, wersja 21H1 i późniejszych.

Mechanizmy wcześniejsze niż Windows 10, wersja 21H1

W tradycyjnych środowiskach aplikacje mogą tworzyć, aktualizować i usuwać pliki w większości miejsc w systemie plików. Ponadto mogą tworzyć, aktualizować i usuwać wpisy w rejestrze systemu Windows. Te pliki i wpisy rejestru są widoczne dla innych aplikacji w systemie, mimo że często nie muszą być. Ponadto po odinstalowaniu aplikacji te pliki i wpisy rejestru są często pozostawione w tyle i stają się zbędne.

Na platformie uniwersalnej systemu Windows (UWP) takie pliki i wpisy rejestru są zwirtualizowane, aby tylko aplikacja, która je zapisuje, mogła je zobaczyć. Gdy aplikacja zostanie odinstalowana, zostaną usunięte. Istnieją jednak prawidłowe scenariusze, w których aplikacja chce, aby takie pliki i wpisy rejestru były widoczne dla innych aplikacji. Ponadto inne aplikacje mogą wymagać, aby te pliki i wpisy były utrwalane nawet po odinstalowaniu aplikacji, która je napisała.

Domyślne zachowanie MSIX

Lokalizacja Kontekst Opis
HKCU (Międzynarodowa Organizacja Turystyczna Czas instalacji
  • Aplikacja może zawierać user.dat plik, który określa wpisy HKCU\Software. Te wpisy są rzeczywiście zapisywane w user.dat pliku w folderze AppData użytkownika (w podfolderze dla każdej aplikacji) i prezentowane aplikacji tak, jakby klucze znajdowały się w HKCU.
  • Do czytania ten prywatny gałąź jest scalony z niezawirtualizowanymoprogramowaniem\, tak aby wszystkie wpisy wydawały się znajdować w tym samym miejscu.
  • Po odinstalowaniu aplikacji zwirtualizowane wpisy nie są już dostępne, ponieważ nigdy nie zostały one rzeczywiście dodane do rejestru.
  • Klucze w zwirtualizowanej gałęzi są widoczne tylko dla aplikacji.
HKCU (Międzynarodowa Organizacja Turystyczna Czas działania
  • Zapisy przechodzą do oddzielnego obszaru prywatnego dla poszczególnych aplikacji i użytkowników.
  • Do celów odczytu ten ul jest scalony z niezwirtualizowanym HKCU, tak aby wszystkie wpisy wydawały się znajdować w tym samym miejscu.
  • Po odinstalowaniu aplikacji zwirtualizowane wpisy zostaną usunięte.
  • Klucze w zwirtualizowanym hive są widoczne tylko dla aplikacji.
HKLM powiedział: Czas instalacji
  • Aplikacja może zawierać registry.dat plik, który określa HKLM\oprogramowanie wpisy. Te wpisy są rzeczywiście zapisywane w user.dat pliku w folderze AppData użytkownika (w podfolderze dla każdej aplikacji) i prezentowane aplikacji tak, jakby klucze znajdowały się w HKLM.
  • Do czytania ten prywatny gałąź jest scalona z niewirtualizowanymoprogramowaniem\, tak aby wszystkie wpisy wydawały się znajdować w tym samym miejscu.
  • Po odinstalowaniu aplikacji zwirtualizowane wpisy nie są już dostępne, ponieważ nigdy nie zostały one rzeczywiście dodane do rejestru.
  • Klucze w zwirtualizowanej gałęzi są widoczne tylko dla aplikacji.
HKLM powiedział: Czas działania
  • Zapisy w gałęzi rejestru HKLM są dozwolone, o ile odpowiedni klucz/wartość nie istnieje w gałęzi pakietu, a użytkownik ma odpowiednie uprawnienia dostępu (co skutecznie oznacza, że jest to dostępne tylko dla aplikacji Centennial działającej z podwyższonymi uprawnieniami).
Dobrze znane foldery Czas instalacji
  • Aplikacja może zawierać folder VFS z dobrze znanymi podfolderami o nazwach, które zawierają dowolne pliki.
  • Na potrzeby odczytu te podfoldery są integrowane z niewirtualizowanymi dobrze znanymi lokalizacjami, co sprawia, że wszystkie pliki wydają się być w jednym miejscu.
Dane aplikacji Czas działania
  • W przypadku wersji systemu Windows mniejszych lub równych 1809 wszystkie operacje zapisu w folderze AppData użytkownika (w tym tworzenie, usuwanie i aktualizowanie) są kopiowane podczas zapisu do prywatnej lokalizacji dla danego użytkownika i aplikacji, które są scalane w czasie wykonywania, aby pojawić się w rzeczywistej lokalizacji AppData.
  • Dla wersji systemu Windows wyższych niż 1809, wszystkie nowo utworzone pliki i foldery w folderze AppData użytkownika są zapisywane w prywatnej lokalizacji dla każdego użytkownika i aplikacji, która jest scalana w czasie działania, aby pojawiać się w rzeczywistej lokalizacji AppData. Modyfikacje istniejących plików AppData są wykonywane w niewirtualizowanych plikach. W przypadku odczytów system najpierw próbuje w lokalizacji prywatnej, a następnie wraca do niewirtualizowanego AppData.
  • W przypadku przechodzenia na tryb awaryjny zapisy do niewirtualizowanych plików są dozwolone.
  • Po odinstalowaniu aplikacji zwirtualizowane wpisy zostaną usunięte.
  • Pliki w zwirtualizowanej lokalizacji są widoczne tylko dla aplikacji.
  • Brak obsługi VFS dla AppData.
  • Oprócz usługi AppData aplikacja może zapisywać dane w dowolnej lokalizacji, w której użytkownik ma dostęp do zapisu, w tym do innych części %userprofile% (z których funkcja AppData jest tylko jedną częścią).

Ograniczona unvirtualizedResources funkcja

Uwaga / Notatka

Obsługa unvirtualizedResources funkcji z ograniczeniami została wprowadzona w systemie Windows 10 w wersji 1903 (10.0; Kompilacja 18362, znana również jako aktualizacja systemu Windows 10 z maja 2019 r.

Aplikacja może zadeklarować unvirtualizedResources ograniczoną możliwość i ustawić właściwości RegistryWriteVirtualization i/lub FilesystemWriteVirtualization na true, aby uzyskać dostęp do zapisu do HKCU i/lub appData. Ma to na celu włączenie sytuacji, w której aplikacja musi zapisywać wpisy, które są następnie widoczne dla innych procesów poza pakietem. Na przykład gry zapisują dane zapisu w AppData i dane te muszą być utrwalane nawet po odinstalowaniu gry.

Majątek Opis
RegistryWriteVirtualization=wyłączone Zapisy w HKCU przechodzą do niewirtualizowanej lokalizacji, są widoczne dla innych procesów poza pakietem i nie są czyszczone podczas odinstalowywania aplikacji.
FilesystemWriteVirtualization=wyłączony Operacje zapisu w usłudze AppData przechodzą do niewirtualizowanej lokalizacji, są widoczne dla innych procesów poza pakietem i nie są czyszczone podczas odinstalowywania aplikacji.

Ten mechanizm wyłącza całkowicie wirtualizację HKCU i/lub AppData , która jest sprzeczna z podstawowym celem. Nie jest to narzędzie szczegółowe i często przekracza wymagania danej aplikacji.