柔軟な仮想化
概要
柔軟な仮想化機能を使用すると、アプリでは、そのファイルおよびレジストリ エントリの "一部のセット" が他のアプリから認識され、アプリのアンインストール時に保持されるように宣言することができます。 "他のすべての" ファイルおよびレジストリ エントリは他のアプリから認識 "されず"、アンインストール時に削除されます。
選択した場所の仮想化を制御する方法
Note
このセクションで説明する動作は 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>
Note
アプリで Windows 10 バージョン 21H1 以前と Windows 10 バージョン 21H1 の構文の両方が宣言されている場合、以前の宣言は Windows 10 バージョン 21H1 以前のバージョンで使用され、新しい宣言は Windows 10 バージョン 21H1 以降で使用されます。
Windows 10 バージョン 21H1 以前のメカニズム、
従来の環境では、アプリはファイルシステムのほとんどの場所でファイルの作成、更新、および削除を行うことができます。 また、Windows レジストリのエントリを作成、更新、削除することもできます。 これらのファイルおよびレジストリ エントリは、 (多くの場合その必要がなくても) システム上の他のアプリから認識することができます。 さらに、アプリがアンインストールされると、これらのファイルおよびレジストリ エントリは多くの場合残され、煩雑になります。
ユニバーサル Windows プラットフォーム (UWP) では、このようなファイルおよびレジストリ エントリは仮想化されるので、それらを書き込むアプリのみに認識されます。 また、アプリがアンインストールされると削除されます。 ただし、このようなファイルおよびレジストリ エントリを他のアプリから認識できるようにするのが有効なシナリオがあります。 また、ファイルやエントリを記述したアプリがアンインストールされた後でも、他のアプリでそれらが保持されることが必要な場合があります。
既定の MSIX 動作
場所 | Context | 説明 |
---|---|---|
HKCU | インストール日時 |
|
HKCU | 実行時間 |
|
HKLM | インストール日時 |
|
HKLM | 実行時間 |
|
既知のフォルダー | インストール日時 |
|
AppData | 実行時間 |
|
unvirtualizedResources
制限付き機能
Note
unvirtualizedResources
制限付き機能のサポートは、Windows 10 May 2019 Update とも呼ばれる、Windows 10 バージョン 1903 (10.0、ビルド 18362) で導入されました。
アプリでは、unvirtualizedResources
制限付き機能を宣言し、RegistryWriteVirtualization または FilesystemWriteVirtualization プロパティ (あるいはその両方) を true
に設定して、HKCU または AppData (あるいはその両方) への書き込みアクセスを取得できます。 これは、アプリが、パッケージの外部にある他のプロセスから認識できるエントリを書き込む必要がある場合に使用します。 たとえば、ゲームが AppData にセーブデータを書き込み、ゲームがアンインストールされた後でもそのデータを保持する必要がある場合です。
プロパティ | 説明 |
---|---|
RegistryWriteVirtualization=disabled | HKCU への書き込みは、仮想化されていない場所に移動し、パッケージの外部にある他のプロセスから認識でき、アプリのアンインストール時にクリーンアップされません。 |
FilesystemWriteVirtualization=disabled | AppData への書き込みは、仮想化されていない場所に移動し、パッケージの外部にある他のプロセスから認識でき、アプリのアンインストール時にクリーンアップされません。 |
このメカニズムにより、HKCU や AppData の仮想化が完全にオフになります。これは、主な目的に反するものです。 これは細かい設定が可能なツールではなく、多くの場合、特定のアプリの要件を超えています。