MSIX アプリ パッケージの差分更新

MSIX アプリ パッケージの更新について

MSIX アプリ パッケージが作成されると、MSIX アプリ パッケージに含まれているファイルに関連する詳細を含むマニフェスト ファイルが生成されます。 パッケージ作成中に 1 つのメタデータが作成され、.msix または .msixbundle パッケージに保存されます。これにより、パッケージの一部を Windows で一意に識別できます。 後で更新中に、Windows でこのメタデータ ファイルを使用して古いパッケージと新しいパッケージを比較し、デバイスに何をダウンロードする必要があるかを判断できます。 このメタデータによってパッケージの一部を一意に識別できるため、差分更新機構がパッケージの任意のバージョンからパッケージの他の任意のバージョンまで完全に機能します (ソース パッケージのバージョンがターゲット パッケージより低いことを想定しています)。

必ず AppxBlockMap.xml ファイル (前述のメタデータ) から開始します。 AppxBlockMap.xml ファイルは、パッケージ内のファイルに関する情報の 2 次元の一覧が含まれている XML ドキュメントです。 最初の次元はファイルに関する概要 (たとえば、名前およびサイズ) を示し、2 番目の次元はそのファイルの各 64 KB スライス ("ブロック") の SHA2-256 ハッシュ表現を提供します。

最初のハッシュは、ファイルの最初の 64 KB ブロックを表します。2 番目のハッシュは、残りの 35 KB を表します (ファイルのサイズが 101,188 バイトの場合)。

更新中にこのファイルの 2 番目のブロックが変更されると、それを反映するようハッシュも更新されます。 ダウンロード コンポーネントでこれが認識され、2 番目のブロックのみが取得されて、変更されていない最初のブロックが古いパッケージから再利用されます。

さらに、ファイル全体が変更されていない場合 (ブロック全体が変更されていないことで判断されます)、そのファイルは既存のパッケージから再利用できます。その結果、Windows 10 ユーザーにとって大幅な節約になります

新しいバージョンへのアップグレード

新しいバージョンの MSIX アプリ パッケージがインストールされると、マニフェスト ファイルが比較され、変更されたファイル ブロックが特定されます。 MSIX アプリ パッケージが新しいバージョンにアップグレードされると、変更されたファイルのみが取得され、更新されたアプリケーションがネットワーク共有または組織の外部にある場合には、帯域幅の消費が少なくなります。

古いバージョンへのアップグレード

古いバージョンの MSIX アプリ パッケージがインストールされると、マニフェスト ファイルが比較され、変更されたファイル ブロックが特定されます。 MSIX アプリ パッケージが古いバージョンにアップグレードされると、変更されたファイルのみが取得され、更新されたアプリケーションがネットワーク共有または組織の外部にある場合には、帯域幅の消費が少なくなります。

アップグレード エクスペリエンスの最適化

デバイスへの MSIX アプリ パッケージの配信またはインストールは、ユーザー エクスペリエンスが向上するように構成できます。 アプリを展開するとき、ユーザーがアプリを終了した後にアプリが更新されるようにデバイスを構成できます。または、アプリケーションを強制的に閉じ、アプリを強制的に更新することもできます。

PowerShell

PowerShell を使用して MSIX アプリ パッケージをデバイスにインストールすると、add-appxpackage コマンドレットが活用されます。 このコマンドレットには、MSIX アプリ パッケージのインストールを変更したり、ユーザー エクスペリエンスをアップグレードしたりする次のパラメーターが含まれています。

パラメーター 説明
-DeferRegistrationWhenPackagesAreInUse このコマンドレットにより、ユーザーがアプリを開いている間は MSIX アプリ パッケージが更新されないことを示します。
-ForceApplicationShutdown このコマンドレットにより、パッケージまたはその依存関係に関連付けられているすべてのアクティブなプロセスが強制的にシャットダウンされることを示します
-ForceUpdateFromAnyVersion 新しいバージョンが既にステージングされているか、または登録されているかどうかに関係なく、MSIX アプリ パッケージによって特定のバージョンのパッケージが強制的にステージングまたは登録されることを示します。
-InstallAllResources コマンドレットによって、バンドル引数から指定されたすべてのリソース パッケージが強制的に展開されることを示します。 これにより、展開エンジンのリソースの適用性チェックがオーバーライドされ、すべてのリソース パッケージのステージングが強制されます。
-RetainFilesOnFailure 展開が失敗したときにこのスイッチが True に設定されていると、インストール処理中にターゲット コンピューター上に作成されたファイルが削除されません。
-Update 追加しているパッケージが依存関係パッケージの更新プログラムであることが指定されます。 親アプリが削除されると、依存関係パッケージが削除されます。 指定しない場合、親アプリを削除してもパッケージは削除されません。

このコマンドレットで使用できるパラメーターの完全な一覧については、add-appxpackage の PowerShell に関する記事を参照してください。