Гибкая виртуализация
Обзор
Функция гибкой виртуализации позволяет приложению объявить, что некоторый набор файлов и записей реестра должен быть видим другим приложениям и что они должны сохраняться при удалении приложения. Все остальные файлы и записи реестра не видны другим приложениям и удаляются вместе с ним.
Как управлять виртуализацией в выбранных расположениях
Примечание.
Поведение, описанное в этом разделе, было реализовано в Windows 10 версии 21H1.
Начиная с Windows 10 версии 21H1 система сохраняет существующее поведение ограниченной возможности unvirtualizedResources, а также свойства 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 по умолчанию
Location | Контекст | Description |
---|---|---|
HKCU | Время установки |
|
HKCU | Время выполнения |
|
HKLM | Время установки |
|
HKLM | Время выполнения |
|
Известные папки | Время установки |
|
AppData | Время выполнения |
|
Ограниченная возможность unvirtualizedResources
Примечание.
Поддержка ограниченной возможности unvirtualizedResources
была реализована в Windows 10 версии 1903 (10.0; сборка 18362), также известной как обновление Windows 10 за май 2019 г.
Приложение может объявить ограниченную возможность unvirtualizedResources
и задать свойства RegistryWriteVirtualization и (или) FilesystemWriteVirtualization для true
, чтобы получить доступ для записи к HKCU и (или) AppData. Это необходимо, чтобы приложение могло записывать записи, доступные другим процессам за пределами его пакета. Например, игры записывают данные сохранений в AppData, и эти данные должны сохраняться даже после удаления игры.
Свойство | Description |
---|---|
RegistryWriteVirtualization=disabled | Операции записи в HKCU направляются в невиртуализированное расположение, видимы другим процессам за пределами пакета и не удаляются вместе с приложением. |
FilesystemWriteVirtualization=disabled | Операции записи в AppData направляются в невиртуализированное расположение, видимы другим процессам за пределами пакета и не удаляются с приложением. |
Такой механизм полностью отключает виртуализацию HKCU и (или) AppData, что противоречит основной цели. Это универсальное приложение, поэтому часто оно может не соответствовать требованиям конкретного приложения.