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 應用程式套件傳遞或安裝到裝置,以改善使用者體驗。 部署應用程式時,可以將裝置設定為在使用者關閉應用程式之後更新應用程式,或強制關閉應用程式,並更新應用程式 forcably。

PowerShell

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

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

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