MSIX 應用程式套件的差異更新

瞭解 MSIX 應用程式套件更新

建立 MSIX 應用程式套件時,會產生資訊清單檔案,其中包含與 MSIX 應用程式套件中包含的檔案相關的詳細資料。 在封裝建立期間,系統會建立中繼資料片段,並儲存在 .msix 或 .msixbundle 套件中,讓 Windows 能夠唯一識別套件的元件。 稍後,在更新期間,Windows 可以使用此中繼資料檔案來比較舊套件與新套件,並判斷需要下載到裝置的專案。 假設此中繼資料允許唯一識別套件的元件,這表示差異更新機制會從套件的任何版本完全運作到套件的任何其他版本, (假設來源套件的版本低於目標套件) 。

它一切都從AppxBlockMap.xml檔案開始, (上述中繼資料) 。 AppxBlockMap.xml檔案是 XML 檔,其中包含封裝中檔案相關資訊的二維清單。 第一個維度會配置檔案 (的高階詳細資料,例如名稱和大小) ,而第二個維度會提供該檔案每個 64KB 配量的 SHA2-256 雜湊表示, (也稱為「區塊」) 。

第一個雜湊代表檔案的第一個 64KB 區塊,而第二個雜湊代表剩餘的 35 KB - 假設檔案為 101188 個位元組。

在更新期間,如果修改該檔案的第二個區塊,也會更新雜湊以反映這個事實。 下載元件瞭解這點,只會提取第二個區塊,並從舊套件重複使用第一個未變更的區塊。

此外,如果整個檔案尚未變更 (,該檔案是由完整區塊集決定,不會變更) 該檔案可以從現有的套件重複使用,進而為 Windows 10 使用者節省大量成本

升級至較新版本

安裝較新版本的 MSIX 應用程式套件時,會比較資訊清單檔案,並識別已修改的檔案區塊。 當 MSIX 應用程式套件升級至較新版本時,如果更新的應用程式位於網路共用或組織外部,則只會擷取修改過的檔案,減少頻寬耗用量。

升級至舊版

安裝舊版 MSIX 應用程式套件時,會比較資訊清單檔案,並識別已修改的檔案區塊。 當 MSIX 應用程式套件升級至舊版時,如果更新的應用程式位於網路共用或組織外部,則會擷取修改過的檔案,減少頻寬耗用量。

優化升級體驗

您可以將 MSIX 應用程式套件傳遞或安裝到裝置,以改善使用者體驗。 部署應用程式時,裝置可以設定為在使用者關閉應用程式之後更新應用程式,或強制關閉應用程式並永久更新應用程式。

PowerShell

使用 PowerShell 將 MSIX 應用程式套件安裝到裝置會利用 add-appxpackage Cmdlet。 此 Cmdlet 包含下列參數,可改變 MSIX 應用程式套件安裝或升級使用者體驗。

參數 描述
-DeferRegistrationWhenPackagesAreInUse 指出當使用者目前開啟應用程式時,此 Cmdlet 會防止 MSIX 應用程式套件更新。
-ForceApplicationShutdown 指出此 Cmdlet 會強制所有與封裝或其相依性相關聯的作用中進程關閉
-ForceUpdateFromAnyVersion 表示 MSIX 應用程式套件會強制將特定版本的套件暫存/註冊,不論較高版本是否已經階段/註冊。
-InstallAllResources 表示 Cmdlet 強制部署從套件組合引數指定的所有資源套件。 這會覆寫部署引擎的資源適用性檢查,並強制暫存所有資源套件。
-RetainFilesOnFailure 如果部署失敗,如果此參數設定為 True,則不會移除在安裝程式期間于目的電腦上建立的檔案。
-Update 指定要新增的封裝是相依性套件更新。 移除父應用程式時,會移除相依性套件。 如果未指定,則在移除父應用程式時,將不會移除套件。

如需此 Cmdlet 可用的參數完整清單,請流覽 add-appxpackage上的 PowerShell 文章。