Freigeben über


Flexible Virtualisierung

Überblick

Mit dem flexiblen Virtualisierungsfeature kann Ihre App deklarieren, dass einige Dateien und Registrierungseinträge für andere Apps sichtbar sein sollten. und dass diese bei der App-Deinstallation beibehalten werden sollen. Alle anderen Dateien und Registrierungseinträge sind für andere Apps nicht sichtbar; und werden bei der Deinstallation entfernt.

So steuern Sie die Virtualisierung ausgewählter Speicherorte

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 der App die Möglichkeit, bestimmte Ordner und/oder Registrierungsschlüssel zu deklarieren, die Sie nichtvirtualisieren möchten.

  • Sie können nur Dateisystemspeicherorte deklarieren, die sich innerhalb %USERPROFILE%\AppDatabefinden.
  • Sie können nur Registrierungsspeicherorte deklarieren, die sich innerhalb von HKCU befinden.

Hier ist 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 Pre-Windows 10, Version 21H1 als auch die Syntax von Windows 10, Version 21H1, deklariert, wird die alte Deklaration unter Vorabversionen von Windows 10, Version 21H1, verwendet, während die neue Deklaration unter Pre-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 auf dem System sichtbar, obwohl sie häufig nicht erforderlich sind. Wenn die App deinstalliert wird, bleiben diese Dateien und Registrierungseinträge oft zurück und werden zu Datenmüll.

In der Universellen Windows-Plattform (UWP) werden solche Dateien und Registrierungseinträge virtualisiert, sodass nur die App, die sie schreibt, sie sehen kann. Und sie werden entfernt, wenn die App deinstalliert wird. Es gibt jedoch gültige Szenarien, in denen die App solche Dateien und Registrierungseinträge für andere Apps sichtbar machen möchte. Darüber hinaus erfordern andere Apps möglicherweise, dass diese Dateien und Einträge auch nach der Deinstallation der App, die sie geschrieben hat, beibehalten werden.

MsIX-Standardverhalten

Standort Kontext BESCHREIBUNG
HKCU Installationszeit
  • Die App kann eine user.dat Datei enthalten, die HKCU\Software-Einträge angibt. Diese Einträge werden tatsächlich in eine user.dat Datei im AppData-Ordner des Benutzers (in einem Unterordner für jede App) geschrieben und der App angezeigt, als wären die Schlüssel in HKCU enthalten.
  • 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 hinzugefügt wurden.
  • Schlüssel im virtualisierten Hive sind nur für die App sichtbar.
HKCU Laufzeit
  • 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 registry.dat Datei enthalten, die HKLM\Software-Einträge angibt. Diese Einträge werden tatsächlich in eine user.dat Datei im AppData-Ordner des Benutzers (in einem Unterordner für jede App) geschrieben und der App angezeigt, als wären die Schlüssel in HKLM enthalten.
  • 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 hinzugefügt wurden.
  • Schlüssel im virtualisierten Hive sind nur für die App sichtbar.
HKLM Laufzeit
  • 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 nichtvirtualisierten bekannten Speicherorten zusammengeführt, sodass sich alle Dateien an derselben Stelle befinden.
Anwendungsdaten Laufzeit
  • Für Windows-Versionen, die kleiner oder gleich 1809 sind, werden alle Schreibvorgänge in den AppData-Ordner des Benutzers (einschließlich Erstellen, Löschen und Aktualisieren) auf einen privaten Speicherort für jeden Benutzer und jede App kopiert, der zur Laufzeit zusammengeführt wird, um im tatsächlichen AppData-Ordner sichtbar zu sein.
  • Für Windows-Versionen, die größer als 1809 sind, werden alle neu erstellten Dateien und Ordner im AppData-Ordner des Benutzers in einen privaten Pro-Benutzer-App-Speicherort geschrieben, der zur Laufzeit zusammengeführt wird, um im tatsächlichen AppData-Speicherort angezeigt zu werden. Änderungen an vorhandenen AppData-Dateien werden für die nichtvirtualisierten Dateien vorgenommen. Bei Lesevorgängen versucht das System zuerst den privaten Speicherort und greift dann auf die nichtvirtualisierte AppData zurück.
  • Bei Fallback sind Schreibvorgänge in die nichtvirtualisierten 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 einen beliebigen Ort schreiben, an dem der Benutzer Schreibzugriff hat, einschließlich anderer Teile (von %userprofile% denen AppData nur ein Teil ist).

Die eingeschränkte Funktion unvirtualizedResources

Hinweis

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

Ihre App kann die unvirtualizedResources eingeschränkte Funktion deklarieren und die Eigenschaften RegistryWriteVirtualization und/oder FilesystemWriteVirtualization auf truefestlegen, um Schreibzugriff auf HKCU und/oder appData zu erhalten. Dies ermöglicht den Fall, dass Ihre App Einträge schreiben muss, die dann für andere Prozesse außerhalb ihrer Paketgrenzen sichtbar sind. Spiele schreiben beispielsweise Speicherdaten in AppData, und diese Daten müssen auch nach der Deinstallation des Spiels beibehalten werden.

Eigentum BESCHREIBUNG
RegistryWriteVirtualization=deaktiviert Schreibvorgänge in HKCU wechseln zum nichtvirtualisierten Speicherort, sind für andere Prozesse außerhalb des Pakets sichtbar und werden bei der App-Deinstallation nicht bereinigt.
FilesystemWriteVirtualization=deaktiviert Schreibvorgänge in AppData wechseln zum nichtvirtualisierten Speicherort, sind für andere Prozesse außerhalb des Pakets sichtbar und werden bei der App-Deinstallation nicht bereinigt.

Dieser Mechanismus deaktiviert die HKCU- und/oder AppData-Virtualisierung insgesamt, was dem primären Ziel entgegenläuft. Es ist kein fein abgestimmtes Tool, und er überschreitet häufig die Anforderungen einer bestimmten App.