Flexible Virtualisierung

Überblick

Das Feature zur flexiblen Virtualisierung bietet deiner App die Möglichkeit, zu deklarieren, dass eine Teilmenge ihrer Dateien und Registrierungseinträge für andere Apps sichtbar sein soll, und dass diese nach der Deinstallation der App erhalten bleiben sollen. Alle anderen Dateien und Registrierungseinträge sind für andere Apps nicht sichtbar und werden bei der Deinstallation entfernt.

Steuern der Virtualisierung ausgewählter Standorte

Hinweis

Das in diesem Abschnitt beschriebene Verhalten wurde in Windows 10, Version 21H1, eingeführt.

Ab Windows 10, Version 21H1, behält das System das bestehende Verhalten der eingeschränkten Funktion unvirtualizedResources sowie der Eigenschaften RegistryWriteVirtualization und FilesystemWriteVirtualization bei. Darüber hinaus bietet das System ihrer App neuerdings die Möglichkeit, bestimmte Ordner und/oder Registrierungsschlüssel zu deklarieren, die der Virtualisierung entzogen werden sollen.

  • Es können nur Speicherorte im Dateisystem deklariert werden, die sich innerhalb von %USERPROFILE%\AppData befinden.
  • Es können nur Speicherorte in der Registrierung innerhalb von HKCU deklariert werden.

Hier finden Sie ein Beispiel.

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

Hinweis

Wenn Ihre App sowohl die vor Windows 10, Version 21H1, als auch die ab Windows 10, Version 21H1, gültige Syntax deklariert, wird die alte Deklaration für Versionen vor Windows 10, Version 21H1, verwendet, während die neue Deklaration in Windows 10, Version 21H1 und höher, verwendet wird.

Mechanismen vor Windows 10, Version 21H1

In herkömmlichen Umgebungen können Apps Dateien an den meisten Stellen im Dateisystem erstellen, aktualisieren und löschen. Außerdem können sie Einträge in der Windows-Registrierung erstellen, aktualisieren und löschen. Diese Dateien und Registrierungseinträge sind für andere Apps im System sichtbar, obwohl dies häufig nicht erforderlich ist werden. Wenn die App deinstalliert wird, bleiben diese Dateien und Registrierungseinträge außerdem häufig zurück und führen zu unnützer Unordnung.

In der universellen Windows-Plattform (UWP) werden solche Dateien und Registrierungseinträge virtualisiert, sodass sie nur für die App sichtbar sind, die sie schreibt. Und sie werden entfernt, wenn die App deinstalliert wird. Es gibt jedoch gültige Szenarien, in denen es für die App sinnvoll ist, dass solche Dateien und Registrierungseinträge für andere Apps sichtbar sind. Außerdem kann es für andere Apps erforderlich sein, dass diese Dateien und Einträge auch dann beibehalten werden, wenn die App deinstalliert wurde, die sie geschrieben hat.

MSIX-Standardverhalten

Standort Kontext Beschreibung
HKCU Installationszeit
  • Die App kann eine Datei user.dat beinhalten, die Einträge unter HKCU\Software angibt. Diese Einträge werden tatsächlich in eine Datei user.dat im AppData-Ordner des Benutzers (in einem Unterordner für jede App) geschrieben und der App so präsentiert, als ob die Schlüssel in HKCU gespeichert wären.
  • Zum Lesen wird diese private Struktur mit der nicht virtualisierten HKCU\Software zusammengeführt, sodass alle Einträge an derselben Stelle zu sein scheinen.
  • Wenn die App deinstalliert wird, sind die virtualisierten Einträge nicht mehr verfügbar, da sie der Registrierung nie tatsächlich hinzugefügt wurden.
  • Die Schlüssel in der virtualisierten Struktur sind nur für die App sichtbar.
HKCU Ausführungszeit
  • Schreibvorgänge erfolgen in eine separate private Struktur pro App und pro Benutzer.
  • Zum Lesen wird diese Struktur mit der nicht virtualisierten HKCU zusammengeführt, sodass alle Einträge an derselben Stelle zu sein scheinen.
  • Wenn die App deinstalliert wird, werden die virtualisierten Einträge entfernt.
  • Die Schlüssel in der virtualisierten Struktur sind nur für die App sichtbar.
HKLM Installationszeit
  • Die App kann eine Datei registry.dat beinhalten, die Einträge unter HKLM\Software angibt. Diese Einträge werden tatsächlich in eine Datei user.dat im AppData-Ordner des Benutzers (in einem Unterordner für jede App) geschrieben und der App so präsentiert, als ob die Schlüssel in HKLM gespeichert wären.
  • Zum Lesen wird diese private Struktur mit der nicht virtualisierten HKLM\Software zusammengeführt, sodass alle Einträge an derselben Stelle zu sein scheinen.
  • Wenn die App deinstalliert wird, sind die virtualisierten Einträge nicht mehr verfügbar, da sie der Registrierung nie tatsächlich hinzugefügt wurden.
  • Die Schlüssel in der virtualisierten Struktur sind nur für die App sichtbar.
HKLM Ausführungszeit
  • Schreibvorgänge unter HKLM sind zulässig, solange kein entsprechender Schlüssel/Wert in der Paketstruktur vorhanden ist und der Benutzer über die richtigen Zugriffsberechtigungen verfügt (was effektiv bedeutet, dass dies nur für eine Centennial-App verfügbar ist, die mit erhöhten Rechten ausgeführt wird).
Bekannte Ordner Installationszeit
  • Die App kann einen VFS-Ordner mit bekannten benannten Unterordnern enthalten, die beliebige Dateien enthalten.
  • Zum Lesen werden diese Unterordner mit den nicht virtualisierten bekannten Speicherorten zusammengeführt, sodass sich alle Dateien an derselben Stelle zu befinden scheinen.
AppData Ausführungszeit
  • Bei Windows Versionen kleiner oder gleich 1809 werden alle Schreibvorgänge in den AppData-Ordner des Benutzers (einschließlich Erstellen, Löschen und Aktualisieren) beim Schreiben an einen privaten Speicherort pro Benutzer und pro App kopiert, der zur Laufzeit zusammengeführt wird, um am tatsächlichen AppData-Speicherort zu erscheinen.
  • Für Windows-Versionen höher als 1809 werden alle neu erstellten Dateien und Ordner im AppData-Ordner des Benutzers an einen privaten Speicherort pro Benutzer und pro App geschrieben, der zur Laufzeit zusammengeführt wird, damit sie am tatsächlichen AppData-Speicherort erscheinen. Änderungen an vorhandenen AppData-Dateien werden an den nicht virtualisierten Dateien vorgenommen. Bei Lesevorgängen versucht das System zuerst, den privaten Speicherort zu verwenden und fällt dann auf die nicht virtualisierte AppData zurück.
  • Bei diesem Zurückfallen sind Schreibvorgänge in die nicht virtualisierten Dateien zulässig.
  • Wenn die App deinstalliert wird, werden die virtualisierten Einträge entfernt.
  • Dateien am virtualisierten Speicherort sind nur für die App sichtbar.
  • Es gibt keine VFS-Unterstützung für AppData.
  • Abgesehen von AppData kann die App an jeden beliebigen Speicherort schreiben, für den der Benutzer Schreibzugriff hat, einschließlich anderer Teile von %userprofile% (von denen AppData nur ein Teil ist).

Die eingeschränkte Funktion unvirtualizedResources

Hinweis

Unterstützung für die eingeschränkte Funktion unvirtualizedResources wurde in Windows 10, Version 1903 (10.0, Build 18362) eingeführt, auch bekannt als Windows 10-Update aus Mai 2019.

Ihre App kann die eingeschränkte Funktion unvirtualizedResources deklarieren und die Eigenschaften RegistryWriteVirtualization und/oder FilesystemWriteVirtualization auf true festlegen, um Schreibzugriff auf HKCU und/oder auf AppData zu erhalten. Dies soll den Fall ermöglichen, dass Ihre App Einträge schreiben muss, die dann für andere Prozesse außerhalb des Pakets sichtbar sind. Beispielsweise schreiben Spiele Speicherdaten in AppData, und diese Daten müssen auch nach der Deinstallation des Spiels erhalten bleiben.

Eigenschaft BESCHREIBUNG
RegistryWriteVirtualization=disabled Schreibvorgänge in HKCU erfolgen am nicht virtualisierten Speicherort, sind für andere Prozesse außerhalb des Pakets sichtbar und werden bei der Deinstallation der App nicht bereinigt.
FilesystemWriteVirtualization=disabled Schreibvorgänge in AppData erfolgen am nicht virtualisierten Speicherort, sind für andere Prozesse außerhalb des Pakets sichtbar und werden bei der Deinstallation der App nicht bereinigt.

Durch diesen Mechanismus wird die Virtualisierung von HKCU und/oder AppData vollständig deaktiviert, was dem Hauptziel zuwiderläuft. Es ist kein Tool für detailgenaue Einstellungen und übersteigt häufig die Anforderungen einer bestimmten App.