移除使用者的 MSIX 套件並不一定會立即刪除其分階段檔案。 Windows 透過追蹤使用者、其他套件或執行中的程序是否仍參考這些已暫存的套件來管理它們。
描述套件壽命時,請使用以下術語:
- 暫存:將套件的酬載放入 Windows 管理的安裝儲存庫。
- 註冊:使分階段推出的套件可供使用者使用,並建立其使用者專屬的整合。
- 移除或取消註冊:移除使用者的註冊及整合。
- Destage:從儲存體中刪除已暫存的套件酬載。
移除作業可以將套件取消註冊,而不必立即將其移出暫存區。
強參考
Windows 無法在強參考還存在時取消暫存套件。 常見的可靠參考資料包括:
- 使用者明確的套件註冊。
- 讓使用者能使用套件的佈建。
- 透過
PackageDependency宣告的靜態依賴。 - 主機-執行階段相依性。
- 一種已持久化的動態相依關係,只有套件能滿足。
- 這個流程目前正在使用套件內容。
- 系統 PIN 碼
- 統一更新平台(UUP)產品成員資格。
Framework 套件通常會維持暫存狀態,因為其他套件依賴它們。 多個 Framework 套件版本可以並存,在應用程式移轉至不同版本期間。
弱式參考
弱參考並不能獨立維持套件的已暫存狀態。 資源與套件關係是最主要的例子。 如果只剩下弱參考,Windows 可以移除該套件及其弱關聯。
移除時會發生什麼事
當你移除套件時,Windows 會先移除適用的使用者註冊和使用者專屬整合。 接著評估是否仍存在強參考:
- 如果有強參考存在,套件仍維持在暫存狀態。
- 若無強參考,該封裝即可解除暫存。
- Windows 在部署下一次評估並收集未引用套件時,會移除該承載內容。
拆除作業完成後才會進行取消預備區狀態。 部分參考變更發生在部署操作之外,因此有效載荷清理並不總是立即完成。
如果有程序正在使用該套件,移除時通常會要求關閉應用程式。 為避免中斷程序,請呼叫 PackageManager.RemovePackageAsync,並搭配 RemovalOptions.DeferRemovalWhenPackagesAreInUse。 Windows 會在套件不再使用後完成移除。
PowerShell 行為
Remove-AppxPackage 可移除登錄項目。 不要把沒有使用者註冊當作 Windows 已經刪除所有暫存檔案的證據。
在診斷由其他使用者或裝置佈建所持有的參照時,使用 Get-AppxPackage -AllUsers 和佈建命令。 移除已配置的套件會影響未來的註冊,但不會移除已存在的使用者註冊。