删除用户的 MSIX 包并不总是会立即删除其暂存文件。 Windows通过跟踪用户、其他包或正在运行的进程是否仍引用它们来管理暂存包。
在描述包生存期时使用以下术语:
- 暂存:将包内容放置在 Windows 托管的安装存储中。
- 注册:使分阶段发布的包可供用户使用,并创建其用户专属集成。
- 删除或取消注册:移除用户的注册信息和集成。
- Destage:从存储中删除暂存包负载内容。
删除操作可以取消注册包,而无需立即取消暂存。
强相关参考
当仍保留强引用时,Windows 无法将包移出暂存。 常见的强引用包括:
- 用户的显式包注册。
- 使包可供用户使用的预配。
- 通过
PackageDependency声明的静态依赖项。 - 主机运行时依赖项。
- 只有包才能满足的持久动态依赖项。
- 当前正在使用包内容的进程。
- 系统引脚。
- 统一更新平台(UUP)产品成员资格。
框架包通常保持暂存状态,因为其他包依赖于它们。 当应用程序在版本之间迁移时,多个框架包版本可以并排保留。
弱引用
弱引用不会独立使包处于暂存状态。 资源包之间的关系是主要例子。 如果仅保留弱引用,Windows可以删除包及其弱关系。
删除期间发生的情况
删除包时,Windows首先删除适用的用户注册和特定于用户的集成。 然后,它会评估强引用是否保留:
- 如果仍然存在强引用,包将保持暂存状态。
- 如果未保留任何强引用,则包将有资格移出暂存区。
- Windows 在部署下一次评估并收集未引用的包时删除有效负载。
删除操作完成后,可能会发生 Destaging。 某些引用更改发生在部署操作之外,因此有效负载清理并不总是即时的。
如果进程正在使用该包,则卸载通常会要求关闭应用程序。 为了避免中断进程,请使用 RemovalOptions.DeferRemovalWhenPackagesAreInUse 调用 PackageManager.RemovePackageAsync。 Windows在包不再使用后完成删除。
PowerShell 行为
Remove-AppxPackage 删除一个注册项。 不要将没有用户注册作为 Windows 已删除每个暂存文件的证明。
诊断由其他用户或设备预配过程持有的引用时,请使用 Get-AppxPackage -AllUsers 和预配命令。 删除预配的包会影响将来的注册,但不会删除用户已存在的注册。