Virtualizzazione flessibile

Panoramica

La funzionalità di virtualizzazione flessibile consente all'app di dichiarare che alcuni set di file e voci del Registro di sistema devono essere visibili ad altre app e che devono essere mantenuti nella disinstallazione dell'app. Tutti gli altri file e voci del Registro di sistema non sono visibili ad altre app e vengono rimossi durante la disinstallazione.

Come controllare la virtualizzazione delle posizioni selezionate

Nota

Il comportamento descritto in questa sezione è stato introdotto in Windows 10 versione 21H1.

A partire da Windows 10, versione 21H1, il sistema mantiene il comportamento esistente delle funzionalità con restrizioni unvirtualizedResources e le proprietà RegistryWriteVirtualization e FilesystemWriteVirtualization. Inoltre, il sistema aggiunge alla tua app la possibilità di dichiarare cartelle e/o chiavi del Registro di sistema specifiche che vuoi annullare lavirtualizzazione.

  • È possibile dichiarare solo i percorsi del file system all'interno %USERPROFILE%\AppDatadi .
  • È possibile dichiarare solo i percorsi del Registro di sistema all'interno di HKCU.

Ecco un esempio.

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

Nota

Se l'app dichiara sia la sintassi pre-Windows 10, versione 21H1 che quella di Windows 10, versione 21H1, la dichiarazione precedente verrà usata nelle versioni precedenti a Windows 10, versione 21H1, mentre la nuova dichiarazione verrà usata in versioni precedenti a Windows 10, versione 21H1 e successive.

Meccanismi precedenti a Windows 10, versione 21H1

Negli ambienti tradizionali le app possono creare, aggiornare ed eliminare file nella maggior parte dei casi nel file system. E possono creare, aggiornare ed eliminare voci nel Registro di sistema di Windows. Tali file e voci del Registro di sistema sono visibili ad altre app nel sistema, anche se spesso non devono essere. Inoltre, quando l'app viene disinstallata, i file e le voci del Registro di sistema vengono spesso lasciati indietro e diventano disordinati.

Nella piattaforma UWP (Universal Windows Platform) (UWP), tali file e voci del Registro di sistema vengono virtualizzati in modo che solo l'app che li scrive può visualizzare. E vengono rimossi quando l'app viene disinstallata. Esistono tuttavia scenari validi in cui l'app vuole che tali file e voci del Registro di sistema siano visibili ad altre app. Inoltre, altre app potrebbero richiedere che tali file e voci vengano mantenuti anche dopo la disinstallazione dell'app che li ha scritti.

Comportamento predefinito di MSIX

Ubicazione Contesto Descrizione
HKCU Tempo di installazione
  • L'app può includere un user.dat file che specifica le voci del software HKCU\. Queste voci vengono effettivamente scritte in un user.dat file nella cartella AppData dell'utente (in una sottocartella per ogni app) e presentate all'app come se le chiavi fossero in HKCU.
  • Per la lettura, questo hive privato viene unito con il software HKCU\nonvirtualizzato in modo che tutte le voci appaiano nello stesso posto.
  • Quando l'app viene disinstallata, le voci virtualizzate non sono più disponibili, perché non sono mai state effettivamente aggiunte al Registro di sistema.
  • Le chiavi nell'hive virtualizzato sono visibili solo all'app.
HKCU In fase di esecuzione
  • Le scritture passano a un hive privato separato per ogni app.
  • Per la lettura, questo hive viene unito con l'HKCU nonvirtualizzato in modo che tutte le voci appaiano nella stessa posizione.
  • Quando l'app viene disinstallata, le voci virtualizzate vengono rimosse.
  • Le chiavi nell'hive virtualizzato sono visibili solo all'app.
HKLM Tempo di installazione
  • L'app può includere un registry.dat file che specifica le voci del software HKLM\. Queste voci vengono effettivamente scritte in un user.dat file nella cartella AppData dell'utente (in una sottocartella per ogni app) e presentate all'app come se le chiavi fossero in HKLM.
  • Per la lettura, questo hive privato viene unito con il software HKLM\nonvirtualizzato in modo che tutte le voci appaiano nello stesso posto.
  • Quando l'app viene disinstallata, le voci virtualizzate non sono più disponibili, perché non sono mai state effettivamente aggiunte al Registro di sistema.
  • Le chiavi nell'hive virtualizzato sono visibili solo all'app.
HKLM In fase di esecuzione
  • Le scritture in HKLM sono consentite a condizione che non esista una chiave/valore corrispondente nell'hive del pacchetto e che l'utente disponga delle autorizzazioni di accesso corrette( il che significa che questo è disponibile solo per un'app Centennial con privilegi elevati).
Cartelle note Tempo di installazione
  • L'app può includere una cartella VFS con sottocartelle denominate note che contengono file arbitrari.
  • Per la lettura, queste sottocartelle vengono unite con i percorsi noti non virtuali, in modo che tutti i file vengano visualizzati nella stessa posizione.
Appdata In fase di esecuzione
  • Per le versioni di Windows minori o uguali a 1809, tutte le scritture nella cartella AppData dell'utente (inclusa la creazione, l'eliminazione e l'aggiornamento) vengono copiate in scrittura in un percorso privato per utente, per app, che viene unito in fase di esecuzione per essere visualizzato nel percorso AppData reale.
  • Per le versioni di Windows maggiori di 1809, tutti i file e le cartelle appena creati nella cartella AppData dell'utente vengono scritti in un percorso privato per utente, per app unito in fase di esecuzione per essere visualizzato nel percorso AppData reale. Le modifiche apportate ai file AppData esistenti vengono eseguite nei file non virtuali. Per le letture, il sistema tenta prima di tutto la posizione privata, quindi esegue il fallback all'appData non virtuale.
  • In caso di fallback, le scritture nei file non virtuali sono consentite.
  • Quando l'app viene disinstallata, le voci virtualizzate vengono rimosse.
  • I file nel percorso virtualizzato sono visibili solo all'app.
  • Non è disponibile alcun supporto VFS per AppData.
  • Oltre ad AppData, l'app può scrivere in qualsiasi posizione in cui l'utente abbia accesso in scrittura, incluse altre parti di (di %userprofile% cui AppData è solo una parte).

Funzionalità unvirtualizedResources con restrizioni

Nota

Il supporto per la unvirtualizedResources funzionalità con restrizioni è stato introdotto in Windows 10 versione 1903 (10.0; Build 18362), nota anche come Aggiornamento di Windows 10 (maggio 2019).

L'app può dichiarare la unvirtualizedResources funzionalità con restrizioni e impostare le proprietà RegistryWriteVirtualization e/o FilesystemWriteVirtualization su trueper ottenere l'accesso in scrittura a HKCU e/o a AppData. Ciò consente di abilitare il caso in cui l'app deve scrivere voci che sono quindi visibili ad altri processi all'esterno del pacchetto. Ad esempio, i giochi scrivono i dati di salvataggio in AppData e che i dati devono essere mantenuti anche dopo la disinstallazione del gioco.

Proprietà Descrizione
RegistryWriteVirtualization=disabled Le scritture in HKCU passano alla posizione non virtuale, sono visibili ad altri processi esterni al pacchetto e non vengono pulite durante la disinstallazione dell'app.
FilesystemWriteVirtualization=disabled Le scritture in AppData passano alla posizione non virtuale, sono visibili ad altri processi esterni al pacchetto e non vengono pulite durante la disinstallazione dell'app.

Questo meccanismo disattiva completamente la virtualizzazione HKCU e/o AppData , che va contro l'obiettivo principale. Non è uno strumento con granularità fine e spesso supera i requisiti di una determinata app.