Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обзор
Функция гибкой виртуализации позволяет приложению объявить, что некоторый набор его файлов и записей реестра должен отображаться другим приложениям; и что они должны сохраняться при удалении приложения. Все остальные файлы и записи реестра не видны другим приложениям; и удаляются при удалении.
Управление виртуализацией выбранных расположений
Замечание
Поведение, описанное в этом разделе, появилось в Windows 11.
Начиная с Windows 11, система сохраняет существующее поведение ограниченной возможности 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 11 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 11, так и синтаксис Windows 11, старый синтаксис будет использоваться в версиях до Windows 11, а новый синтаксис будет использоваться в Windows 11 и более поздних версиях.
Механизмы до Windows 11
В традиционных средах приложения могут создавать, обновлять и удалять файлы в большинстве мест в файловой системе. Они могут создавать, обновлять и удалять записи в реестре Windows. Эти файлы и записи реестра видны другим приложениям в системе, даже если они часто не должны быть. Кроме того, при удалении приложения эти файлы и записи реестра часто остаются позади и становятся загромождными.
На универсальной платформе Windows (UWP) такие файлы и записи реестра виртуализируются так, что только приложение, которое их записывает, может их увидеть. И они удаляются при удалении приложения. Но существуют допустимые сценарии, в которых приложение хочет, чтобы такие файлы и записи реестра отображались для других приложений. Кроме того, для других приложений может потребоваться сохранение этих файлов и записей даже после удаления приложения, написавшее их.
Поведение MSIX по умолчанию
| Местоположение | Контекст | Описание |
|---|---|---|
| HKCU | Время установки |
|
| HKCU | Время выполнения |
|
| HKLM | Время установки |
|
| HKLM | Время выполнения |
|
| Известные папки | Время установки |
|
| AppData (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 , которая идет против основной цели. Это не тонко настроенное средство, и оно зачастую выходит за рамки требований заданного приложения.