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 文章。