Partilhar via


Virtualização flexível

Visão geral

O recurso de virtualização flexível fornece uma maneira para seu aplicativo declarar que alguns conjuntos de seus arquivos e entradas do Registro devem estar visíveis para outros aplicativos; e que esses devem persistir na desinstalação do aplicativo. Todos os outros ficheiros e entradas do Registo não são visíveis para outras aplicações; e são removidos na desinstalação.

Como controlar a virtualização de locais selecionados

Observação

O comportamento descrito nesta seção foi introduzido no Windows 10, versão 21H1.

A partir do Windows 10, versão 21H1, o sistema mantém o comportamento existente da capacidade restrita unvirtualizedResources e das propriedades RegistryWriteVirtualization e FilesystemWriteVirtualization. Além disso, o sistema adiciona a capacidade de seu aplicativo declarar pastas específicas e/ou chaves do Registro que você deseja que não sejam virtualizadas.

  • Você pode declarar apenas os locais do sistema de arquivos que estão dentro do %USERPROFILE%\AppData.
  • Você pode declarar somente os locais do Registro que estão dentro do HKCU.

Eis um exemplo.

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

Observação

Se o seu aplicativo declarar a sintaxe pré-Windows 10, versão 21H1 e Windows 10, versão 21H1, a declaração antiga será usada em versões anteriores ao Windows 10, versão 21H1, enquanto a nova declaração será usada em versões anteriores ao Windows 10, versão 21H1 e posteriores.

Mecanismos anteriores ao Windows 10, versão 21H1

Em ambientes tradicionais, os aplicativos podem criar, atualizar e excluir arquivos na maioria dos locais do sistema de arquivos. E eles podem criar, atualizar e excluir entradas no Registro do Windows. Esses arquivos e entradas do Registro são visíveis para outros aplicativos no sistema, mesmo que muitas vezes não precisem ser. Além disso, quando o aplicativo é desinstalado, esses arquivos e entradas do Registro geralmente são deixados para trás e se tornam confusos.

Na Plataforma Universal do Windows (UWP), esses arquivos e entradas do Registro são virtualizados para que apenas o aplicativo que os grava possa vê-los. E são removidos quando a aplicação é desinstalada. Mas há cenários válidos em que o aplicativo deseja que esses arquivos e entradas do Registro sejam visíveis para outros aplicativos. Além disso, outras aplicações podem exigir que esses ficheiros e entradas persistam mesmo depois de a aplicação que os escreveu ser desinstalada.

Comportamento MSIX padrão

Localização Contexto Descrição
HKCU Tempo de instalação
  • A aplicação pode incluir um user.dat arquivo que especifica entradas HKCU\Software. Na verdade, essas entradas são gravadas em um user.dat arquivo na pasta AppData do usuário (em uma subpasta para cada aplicativo) e apresentadas ao aplicativo como se as chaves estivessem em HKCU.
  • Para leitura, esta colmeia privada é mesclada com o HKCU\software não virtualizado para que todas as entradas pareçam estar no mesmo lugar.
  • Quando o aplicativo é desinstalado, as entradas virtualizadas não estão mais disponíveis, porque nunca foram realmente adicionadas ao registro.
  • As chaves no hive virtualizado são visíveis apenas para o aplicativo.
HKCU Tempo de execução
  • As escritas vão para uma seção privada isolada, separada por aplicação e por utilizador.
  • Para leitura, essa seção é mesclada com a HKCU não virtualizada para que todas as entradas pareçam estar no mesmo lugar.
  • Quando o aplicativo é desinstalado, as entradas virtualizadas são removidas.
  • As chaves no hive virtualizado só são visíveis para o aplicativo.
HKLM Tempo de instalação
  • A aplicação pode incluir um registry.dat arquivo que especifica HKLM\Software entradas. Na verdade, essas entradas são gravadas em um user.dat arquivo na pasta AppData do usuário (em uma subpasta para cada aplicativo) e apresentadas ao aplicativo como se as chaves estivessem em HKLM.
  • Para leitura, esta colmeia privada é fundida com o HKLM\Software não virtualizado para que todas as entradas pareçam estar no mesmo lugar.
  • Quando o aplicativo é desinstalado, as entradas virtualizadas não estão mais disponíveis, porque nunca foram realmente adicionadas ao registro.
  • As chaves no hive virtualizado são visíveis apenas para o aplicativo.
HKLM Tempo de execução
  • As gravações em HKLM são permitidas desde que uma chave/valor correspondente não exista no hive do pacote e o usuário tenha as permissões de acesso corretas (o que efetivamente significa que isso só está disponível para um aplicativo Centennial em execução elevado).
Pastas conhecidas Tempo de instalação
  • O aplicativo pode incluir uma pasta VFS com subpastas nomeadas conhecidas que contêm arquivos arbitrários.
  • Para leitura, essas subpastas são mescladas com os locais conhecidos não virtualizados, para que todos os arquivos pareçam estar no mesmo lugar.
AppData Tempo de execução
  • Para versões do Windows 1809 ou anteriores, todas as operações de escrita na pasta AppData do utilizador (incluindo criação, eliminação e atualização) são copiadas durante a escrita para um local privado específico para cada utilizador e aplicativo, que é combinado em tempo de execução para aparecer no local real AppData.
  • Para versões do Windows maiores que 1809, todos os arquivos e pastas recém-criados na pasta AppData do usuário são gravados em um local privado por usuário, por aplicativo, que é mesclado em tempo de execução para aparecer no local AppData real. As modificações nos arquivos AppData existentes são feitas nos arquivos não virtualizados. Para leituras, o sistema tenta primeiro o local privado e, em seguida, retorna ao AppData não virtualizado.
  • No fallback, as gravações nos arquivos não virtualizados são permitidas.
  • Quando o aplicativo é desinstalado, as entradas virtualizadas são removidas.
  • Os arquivos no local virtualizado são visíveis apenas para o aplicativo.
  • Não há suporte a VFS para AppData.
  • Além de AppData, o aplicativo pode gravar em qualquer local onde o usuário tenha acesso de gravação, incluindo outras partes ( %userprofile% das quais AppData é apenas uma parte).

A unvirtualizedResources capacidade restrita

Observação

O suporte para a unvirtualizedResources capacidade restrita foi introduzido no Windows 10, versão 1903 (10.0; Build 18362), também conhecida como Atualização de maio de 2019 do Windows 10.

Seu aplicativo pode declarar o unvirtualizedResources recurso restrito e definir as propriedades RegistryWriteVirtualization e/ou FilesystemWriteVirtualization como true, para obter acesso de gravação ao HKCU e/ou ao AppData. Isso é para habilitar o caso em que seu aplicativo precisa gravar entradas que são visíveis para outros processos fora de seu pacote. Por exemplo, os jogos gravam dados salvos no AppData, e esses dados precisam persistir mesmo depois que o jogo é desinstalado.

Propriedade Descrição
RegistryWriteVirtualization=desativado As escritas no HKCU vão para o diretório não virtualizado, são visíveis para outros processos fora do pacote e não são removidas na desinstalação do aplicativo.
FilesystemWriteVirtualization=desativado As gravações no AppData vão para o local não virtualizado, são visíveis para outros processos fora do pacote e não são limpas na desinstalação do aplicativo.

Esse mecanismo desativa completamente a virtualização HKCU e/ou AppData , o que vai contra o objetivo principal. Não é uma ferramenta refinada e, muitas vezes, excede os requisitos de um determinado aplicativo.