彈性虛擬化
概觀
彈性虛擬化功能可讓您的應用程式宣告 應該讓其他應用程式看到一組 檔案和登錄專案,而且那些專案應該在應用程式卸載時保存。 其他應用程式看不到所有其他檔案和登錄專案,而且會在卸載時移除。
如何控制所選位置的虛擬化
注意
本節所述的行為是在 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 同時宣告 Windows 10 版本 21H1 和 Windows 10 版本 21H1 語法,則舊宣告將會用於 Windows 10 版本 21H1 前版本,而在 Windows 10 版本 21H1 和更新版本上使用新的宣告。
Windows 10 版本 21H1 之前的機制
在傳統環境中,應用程式可以在檔案系統的大部分位置建立、更新和刪除檔案。 他們可以在 Windows 登錄中建立、更新和刪除專案。 這些檔案和登錄項目在系統上的其他應用程式都可以看到,即使這些檔案和登錄專案通常不需要。 此外,卸載應用程式時,這些檔案和登錄專案通常會留下,而且變得雜亂無章。
在 通用 Windows 平台 (UWP) 中,這類檔案和登錄專案會虛擬化,因此只有寫入它們的應用程式可以看到它們。 當應用程式卸載時,就會移除它們。 但在某些情況下,應用程式想要讓其他應用程式看到這類檔案和登錄專案。 此外,其他應用程式可能會要求這些檔案和專案在卸載寫入這些檔案和項目之後仍會保存。
預設 MSIX 行為
Location | 內容 | 描述 |
---|---|---|
HKCU | 安裝時間 |
|
HKCU | 運行時間 |
|
HKLM | 安裝時間 |
|
HKLM | 運行時間 |
|
已知資料夾 | 安裝時間 |
|
AppData | 運行時間 |
|
unvirtualizedResources
受限制的功能
注意
unvirtualizedResources
Windows 10 版本 1903 (10.0) 引進了對受限制功能的支援;組建 18362),也稱為 Windows 10 2019 年 5 月更新。
您的應用程式可以宣告unvirtualizedResources
受限制的功能,並將 RegistryWriteVirtualization 和/或 FilesystemWriteVirtualization 屬性設定為 true
,以取得 HKCU 和/或 AppData 的寫入許可權。 這是為了啟用您的應用程式需要寫入項目的情況,然後讓套件外部的其他進程看到這些專案。 例如,遊戲會將數據 寫入AppData,而且即使在卸載遊戲之後,該數據也需要保存。
屬性 | 說明 |
---|---|
RegistryWriteVirtualization=disabled | 寫入 HKCU 會移至未虛擬化的位置、對套件以外的其他進程可見,而且不會在應用程式卸載時清除。 |
FilesystemWriteVirtualization=disabled | 寫入 AppData 會移至未虛擬化的位置、對套件外部的其他進程可見,而且不會在應用程式卸載時清除。 |
此機制完全關閉 HKCU 和/或 AppData 虛擬化,這與主要目標無關。 這不是精細的工具,而且通常超過指定應用程式的需求。