アプリ パッケージの更新プログラムApp package updates

既存の Windows アプリを更新するアプリの重要な変更された部分のみがダウンロードされることを確認するのには、Windows アプリ パッケージの最新の更新が最適化されています。Updating modern Windows app packages is optimized to ensure that only the essential changed bits of the app are downloaded to update an existing Windows app.

AppxBlockMap.xml ファイル内のメタデータMetadata in the AppxBlockMap.xml file

パッケージの作成時に、高レベルのメタデータが作成され、Windows によって一意に識別するパッケージのパーツをできるアプリ パッケージ ファイル (.appx または .msix) に格納されています。At a high level, during package creation, a piece of metadata is created and stored in the app package file (.appx or .msix) which allows parts of the package to be uniquely identified by Windows. アプリ パッケージを更新するときに Windows は、新しいパッケージを古いパッケージを比較しをデバイスにダウンロードする必要があると判断したメタデータ ファイルを使用します。When updating an app package, Windows uses the metadata file to compare the old package to the new package and determine what needs to be downloaded to the device.

メタデータは、一意に識別するパッケージのパーツを許可、つまり差分更新メカニズム完全 (ソースのパッケージが、ターゲットよりも古いバージョンと仮定した場合、パッケージの他のバージョンのパッケージのすべてのバージョンから関数パッケージの場合)。Since the metadata allows parts of the package to be uniquely identified, this means the differential update machinery fully functions from any version of a package to any other version of a package (assuming the source package has a lower version than the target package).

メタデータは、(前述のメタデータ) の AppxBlockMap.xml ファイルに含まれます。The metadata is contained in the AppxBlockMap.xml file (the aforementioned metadata). AppxBlockMap.xml ファイルは、2 つを含む XML ファイルでは、パッケージ内のファイルに関する情報の次元の一覧。The AppxBlockMap.xml file is an XML file that contains a two dimensional list of information about files in the package. 最初の次元をレイアウト ファイル (名前やサイズなど) の高レベルの詳細と、2 番目の次元は、そのファイル (「ブロック」) の各 64 KB スライスの SHA2 256 ハッシュの表現を提供します。The first dimension lays out high level details on the file (e.g., name and size) and the second dimension provides SHA2-256 hash representations of each 64KB slice of that file (the "block").

AppxBlockMap.xml ファイルのサンプルを次に示します。Here's a sample of an AppxBlockMap.xml file.

<!--?xml version="1.0" encoding="UTF-8"?-->
<blockmap hashmethod="http://www.w3.org/2001/04/xmlenc#sha256" 
          xmlns="http://schemas.microsoft.com/appx/2010/blockmap">
  <file lfhsize="66" size="101188" name="asset1.jpg">
    <block hash="2bidNE0JyaO+FjaTpRe0g8HzUCblUf/cfBcTXiZR74c="/>
    <block hash="+jeFwKrGk5gw9wSICWsWRtEQXwcLC7af4EWS7DgrAkY="/>
  </file>
  <file lfhsize="61" size="108823" name="asset2.jpg">
    <block hash="u0+5S0GOzwyAfYx54tKycZyHRBYm2ybvq27dkIKqDsQ="/>
    <block hash="F9h0FRMetL6BNCszAYB0bgyx2KWN+dO1bls4Q9m267c="/>
  </file>
  ...
</blockmap>

最初のファイル (asset1.jpg) には、2 つのブロック ハッシュがあります。 最初のハッシュは、ファイルの最初の 64 KB のブロックを表し、ファイルを指定された 2 つ目ハッシュ表します残り 35 KB - は 101188 バイト。The first hash represents the first 64KB block of the file and the second hash represents the remaining 35KB - given the file is 101188 bytes.

、更新中にそのファイルの 2 番目のブロックが変更された場合、ハッシュも更新反映するようにします。During an update, if the second block of that file is modified, the hash is also updated to reflect that. ダウンロードしたコンポーネントは、2 番目のブロックをプルダウンされ、古いパッケージから変更されていない最初のブロックを再利用されます。The download component pulls down the second block and reuses the first unchanged block from the old package.

ファイル全体が変更されない場合より大きな規模で (を変更しないブロックの完全なセットによって決定されます)、そのファイルは、時間とリソースを節約して、既存のパッケージから再利用できます。On a larger scale, if an entire file does not change (determined by a full set of blocks not changing), that file can be reused from the existing package, saving time and resources.

アプリの更新の制約App update constraints

更新プログラムは、同じパッケージ ファミリ内で実行されます。Updates are performed within the same package family

パッケージ ファミリは、パッケージの名前とパブリッシャーで構成されます。The package family is comprised of the Package Name and Publisher. 更新できるようにするには、新しいパッケージのメタデータを以前にインストールされたパッケージと同じである必要があります。To be able to update, the new package metadata will need to be the same as the previously installed package.

アプリの更新プログラムは、新しいバージョンに増やす必要があります。App updates must increment to a higher version

アプリの更新プログラムは、[全般] に現在の 1 つ以上の新しいパッケージのバージョンが必要になります。App updates is general will require the version of the new package to be higher than the current one. 全般的なアプリの更新プロセスでは、既定でインストールする下位のバージョンを使用してパッケージは許可されません。General app update process will not allow packages with lower versions to be installed by default. Windows 10 1809 の更新を開始する 'ロールバック' するが導入されました。Starting Windows 10 1809 update, 'rollback' was introduced. これにより、低いバージョンのパッケージを上書きスイッチが更新プログラムの引数の一部として提供されている場合にインストールします。It allows lower version packages to be installed when an override switch is provided as part of the update arguments. および ForceUpdateFromAnyVersion スイッチを使用して PowerShell で現在使用可能になるAppInstaller ファイルします。It is currently available in PowerShell using the ForceUpdateFromAnyVersion switch and in AppInstaller file.

アプリの更新プログラム パッケージは、さまざまなアーキテクチャを持つことができます。App update package can have a different architecture

新しいアーキテクチャがどこに展開が対象の OS でサポートされている限り、現在インストールされているアプリ パッケージに更新プログラム パッケージはさまざまなアーキテクチャのできます。The update package to the currently installed app package can be of a different architecture as long as the new architecture is supported on the OS where it is being deployed to. 次に、例を示します。X86 があれば MyFavApp(v1.0.0.0) のバージョンでは、Windows 10 デバイスを x64 上にインストールされ、更新 package(v2.0.0.0) は x64 バージョン。MyFavApp(1.0.0.0) は MyFavApp(v2.0.0.0) を正常に更新されます。For example: If you have x86 version of MyFavApp(v1.0.0.0) installed on a x64 Windows 10 device and the update package(v2.0.0.0) is x64 version: MyFavApp(1.0.0.0) will be updated to MyFavApp(v2.0.0.0) successfully.

パッケージの MSIXbundle、MSIX から更新できます。Packages can update from an MSIX to an MSIXbundle

更新プログラム パッケージにアクセスする MSIX パッケージから MSIXbundle パッケージですが、逆はできません。An update package can go from MSIX package to an MSIXbundle package but not vice-versa. MSIXbundle がインストールされている場合、パッケージの更新バンドルを維持する必要があります。When an MSIXbundle is installed, the package update will need to remain a bundle.

差分更新テクノロジを最適化します。Optimize differential update technology

最大数に、差分更新テクノロジを最適化することを確認するいくつかの方法はあります。There are a few ways to ensure that the differential update technology is optimized to the max.

  • ファイルを小さな - これを行うパッケージでは、変更が必要な場合は、完全なファイルが影響を与える、更新プログラムが小さいがまだ保証されます。Keep files in the package small - doing this will ensure that if a change is needed that would impact the full file, the update would still be small.
  • ファイルへの変更をする必要があります加法可能であれば、追加の変更はダウンロードしてくださいエンドユーザーのデバイスのみ、変更されたブロックします。Changes to files should be additive if possible - additive changes will ensure that end-user devices only download those changed blocks.
  • ファイルへの変更は、アプリに大きなファイルが、一連のブロックへの変更を含む、ファイルの中央に変更が大幅にヘルプが必要な場合に可能な場合は、64 KB のブロックを含める必要があります。Changes to files should be contained to 64KB blocks if possible - if your app does have large files and requires changes to the middle of a file, containing changes to a set of blocks will help significantly.