概觀
彈性虛擬化功能可讓您的應用程式宣告其 一組 檔案和登錄項目能夠被其他應用程式看見,並在應用程式卸載時仍能持續存在。 所有其他檔案和登錄專案對於其他應用程式不可見,並在卸載時移除。
如何控制所選位置的虛擬化
備註
本節所述的行為是在 Windows 10 版本 21H1 中引進的。
從 Windows 10 版本 21H1 開始,系統會保留未虛擬化Resources 受限制功能的現有行為,以及 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>
備註
如果您的 app 同時宣告 pre-Windows 10 版本 21H1 和 Windows 10 版本 21H1 語法,那麼舊的宣告將用於 pre-Windows 10 版本 21H1 前的版本,而新的宣告將用於 pre-Windows 10 版本 21H1 和之後的版本。
Windows 10 版本 21H1 之前的機制
在傳統環境中,應用程式可以在檔案系統的大部分位置建立、更新和刪除檔案。 他們可以在 Windows 註冊表中建立、更新和刪除條目。 這些文件和登錄項在系統上的其他應用程式都可以看到,即使它們通常不需要被看到。 此外,卸載應用程式時,這些檔案和登錄專案通常會留下,而且變得雜亂無章。
在通用 Windows 平臺 (UWP) 中,這類檔案和登錄專案會虛擬化,因此只有寫入它們的應用程式可以看到它們。 當應用程式卸載時,就會移除它們。 但在某些情況下,應用程式希望讓其他應用程式可以見到這類檔案和登錄項目。 此外,其他應用程式可能會要求,即使在卸載寫入這些檔案和條目的應用程式後,這些檔案和條目仍需保存。
預設 MSIX 行為
| 地點 | 上下文 | 說明 |
|---|---|---|
| 香港 CU | 安裝時間 |
|
| 香港 CU | 執行期間 |
|
| 香港電影學院 | 安裝時間 |
|
| 香港電影學院 | 執行期間 |
|
| 已知資料夾 | 安裝時間 |
|
| 應用數據 | 執行期間 |
|
unvirtualizedResources受限制的功能
備註
支援 unvirtualizedResources 受限制功能是在 Windows 10 版本 1903(10.0;組建 18362)中引入的,此版本也稱為 Windows 10 2019 年 5 月更新。
您的應用程式可以宣告 unvirtualizedResources 受限制的功能,並將 RegistryWriteVirtualization 和/或 FilesystemWriteVirtualization 屬性設定為 true,以取得 HKCU 和/或 AppData 的寫入許可權。 這是為了使得當您的應用程式需要寫入條目時,套件外部的其他程序能夠看到這些條目。 例如,遊戲會將數據寫入 AppData,而且即使在卸載遊戲之後,該數據也需要保存。
| 房產 | 說明 |
|---|---|
| RegistryWriteVirtualization=已禁用 | 寫入 HKCU 會移至未虛擬化的位置、對套件以外的其他進程可見,而且不會在應用程式卸載時清除。 |
| 文件系統寫入虛擬化=禁用 | 寫入 AppData 的資料會傳送至未虛擬化的位置,對於套件外的其他程序可見,且在應用程式解除安裝時不會被清除。 |
此機制完全關閉 HKCU 和/或 AppData 虛擬化,這與主要目標無關。 這不是精細的工具,而且通常超過指定應用程式的需求。