Поделиться через


Гибкая виртуализация

Обзор

Функция гибкой виртуализации позволяет приложению объявить, что некоторый набор его файлов и записей реестра должен отображаться другим приложениям; и что они должны сохраняться при удалении приложения. Все остальные файлы и записи реестра не видны другим приложениям; и удаляются при удалении.

Управление виртуализацией выбранных расположений

Замечание

Поведение, описанное в этом разделе, появилось в Windows 10 версии 21H1.

Начиная с Windows 10 версии 21H1, система сохраняет существующее поведение ограниченной возможности невиртуализированных ресурсов, а также свойства RegistryWriteVirtualization и FilesystemWriteVirtualization. Кроме того, система добавляет возможность указания определенных папок и (или) разделов реестра, которые необходимо освободить от виртуализации.

  • Вы можете объявить только расположения файловой системы, находящиеся в пределах %USERPROFILE%\AppData.
  • Вы можете указывать только те расположения реестра, которые находятся в HKCU.

Вот пример.

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

Замечание

Если ваше приложение объявляет как предварительную версию Windows 10, версию 21H1, так и синтаксис Windows 10 версии 21H1, то старое объявление будет использоваться в версиях до Windows 10 версии 21H1, а новое объявление будет использоваться в предварительной версии Windows 10 версии 21H1 и более поздних версий.

Механизмы до Windows 10 версии 21H1

В традиционных средах приложения могут создавать, обновлять и удалять файлы в большинстве мест в файловой системе. Они могут создавать, обновлять и удалять записи в реестре Windows. Эти файлы и записи реестра видны другим приложениям в системе, даже если они часто не должны быть. Кроме того, при удалении приложения эти файлы и записи реестра часто остаются позади и становятся загромождными.

На универсальной платформе Windows (UWP) такие файлы и записи реестра виртуализируются так, что только приложение, которое их записывает, может их увидеть. И они удаляются при удалении приложения. Но существуют допустимые сценарии, в которых приложение хочет, чтобы такие файлы и записи реестра отображались для других приложений. Кроме того, для других приложений может потребоваться сохранение этих файлов и записей даже после удаления приложения, написавшее их.

Поведение MSIX по умолчанию

Местоположение Контекст Описание
HKCU Время установки
  • Приложение может содержать файл user.dat, в котором указаны записи HKCU\Software. Эти записи на самом деле записываются user.dat в файл в папке AppData пользователя (в подпапке для каждого приложения) и отображаются в приложении, как если бы ключи находились в HKCU.
  • Для чтения этот частный куст объединяется с невиртуализированнымпрограммным обеспечением \, чтобы все записи, как представляется, были в одном месте.
  • Когда приложение удаляется, виртуализированные записи больше не доступны, так как они никогда не были добавлены в реестр.
  • Ключи в виртуализированном улье видны только приложению.
HKCU Время выполнения
  • Записи отправляются в отдельные частные области для каждого приложения и пользователя.
  • Для чтения этот куст объединяется с невиртуализированным HKCU, чтобы все записи, как представляется, были в одном месте.
  • При удалении приложения удаляются виртуализированные записи.
  • Ключи в виртуализированном улье видны только для приложения.
HKLM Время установки
  • Приложение может включать файл, который указывает registry.dat записи HKLM\Software. Эти записи на самом деле записываются user.dat в файл в папке AppData пользователя (в подпапке для каждого приложения) и отображаются в приложении, как если бы ключи находились в HKLM.
  • Для чтения этот частный раздел реестра объединяется с невиртуализированным HKLM\Software, так что все записи отображаются в одном месте.
  • Когда приложение удаляется, виртуализированные записи больше не доступны, так как они никогда не были добавлены в реестр.
  • Ключи в виртуализированном улье видны только приложению.
HKLM Время выполнения
  • Записи в HKLM разрешены, если соответствующий ключ и значение отсутствуют в дереве реестра пакета, и у пользователя есть соответствующие разрешения (что фактически означает, что это доступно только для приложения Centennial, работающего в режиме с повышенными правами).
Известные папки Время установки
  • Приложение может включать папку VFS с известными именованными вложенными папками, содержащими произвольные файлы.
  • Для чтения эти вложенные папки объединяются с невиртуализированными известными расположениями, чтобы все файлы отображались в одном месте.
AppData (AppData) Время выполнения
  • Для версий Windows, меньших или равных 1809, все записи в папку AppData пользователя (включая создание, удаление и обновление) копируются при записи в отдельное расположение для каждого пользователя и приложения, и во время выполнения объединяются, чтобы отображаться в реальной папке AppData.
  • Для версий Windows, превышающих 1809, все вновь созданные файлы и папки в папке AppData пользователя записываются в частное расположение для каждого пользователя и приложения, которое объединяется во время выполнения, чтобы отображаться в реальном расположении AppData. Изменения существующих файлов AppData выполняются в невиртуализированных файлах. Для операций чтения система сначала обращается к частному расположению, а затем возвращается к невиртуализированному AppData.
  • В резервном варианте разрешены записи в невиртуализированные файлы.
  • При удалении приложения удаляются виртуализированные записи.
  • Файлы в виртуализированном расположении видны только приложению.
  • Поддержка VFS для AppData отсутствует.
  • Помимо AppData, приложение может записывать данные в любое место, где пользователь имеет доступ на запись, включая другие части %userprofile% (из которых AppData — только одна часть).

Ограниченная unvirtualizedResources функция

Замечание

Поддержка ограниченной unvirtualizedResources возможности появилась в Windows 10 версии 1903 (10.0; Сборка 18362), также известная как обновление Windows 10 мая 2019 г.

Приложение может объявить unvirtualizedResources ограниченную возможность и задать свойства RegistryWriteVirtualization и/или FilesystemWriteVirtualization на true, чтобы получить право записи в HKCU и/или в AppData. Это позволяет включить ситуацию, когда приложение должно записывать записи, которые затем видны другим процессам за пределами пакета. Например, игры записывают данные сохранения в AppData, и эти данные должны сохраняться даже после удаления игры.

Недвижимость Описание
RegistryWriteVirtualization=отключено Записи в HKCU отправляются в невиртуализированное расположение, видны другим процессам за пределами пакета и не очищаются при удалении приложения.
FilesystemWriteVirtualization=отключено Записи в AppData отправляются в невиртуализированное расположение, видны другим процессам за пределами пакета и не удаляются при удалении приложения.

Этот механизм полностью отключает виртуализацию HKCU и(или) AppData , которая идет против основной цели. Это не тонко настроенное средство, и оно зачастую выходит за рамки требований заданного приложения.