Updates für App-PaketeApp package updates

Die Aktualisierung moderner Windows-App-Pakete wurde optimiert, um sicherzustellen, dass zum Aktualisieren einer vorhandenen Windows-App nur die wesentlichen geänderten Bits der App heruntergeladen werden.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.

Metadaten in der Datei „AppxBlockMap.xml“Metadata in the AppxBlockMap.xml file

Allgemein werden bei der Paketerstellung Metadaten erstellt und in der App-Paket-Datei (.appx oder .msix) gespeichert, sodass Teile des Pakets unter Windows eindeutig identifiziert werden können.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. Beim Aktualisieren eines App-Pakets wird in Windows anhand der Metadatendatei das alte Paket mit dem neuen Paket verglichen und ermittelt, was auf das Gerät heruntergeladen werden muss.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.

Da anhand der Metadaten Teile des Pakets eindeutig identifiziert werden können, bedeutet dies, dass die differenzielle Aktualisierung jeder Version eines Pakets auf jede andere Version des Pakets voll funktionsfähig ist (vorausgesetzt, das Quellpaket hat eine niedrigere Version als das Zielpaket).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).

Die Metadaten sind in der Datei „AppxBlockMap.xml“ enthalten (die oben genannten Metadaten).The metadata is contained in the AppxBlockMap.xml file (the aforementioned metadata). Bei der Datei „AppxBlockMap.xml“ handelt es sich um eine XML-Datei mit einer zweidimensionalen Liste von Informationen zu den Dateien im Paket.The AppxBlockMap.xml file is an XML file that contains a two dimensional list of information about files in the package. In der ersten Dimension sind allgemeine Details zu der jeweiligen Datei angegeben (z. B. Name und Größe). Die zweite Dimension enthält SHA2-256-Hash-Darstellungen jedes 64-KB-Segments der Datei („Block“).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").

Nachfolgend ein Beispiel für die Datei „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>

Die erste Datei („asset1.jpg“) umfasst zwei Blockhashes. Der erste Hash stellt den ersten 64-KB-Block der Datei dar und der zweite Hash die verbleibenden 35 KB – vorausgesetzt, die Datei besteht aus 101.188 Bytes.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.

Wenn bei einer Aktualisierung der zweite Block dieser Datei geändert wird, wird auch der Hash entsprechend aktualisiert.During an update, if the second block of that file is modified, the hash is also updated to reflect that. Die Downloadkomponente ruft den zweiten Block ab und verwendet den ersten unveränderten Block des alten Pakets wieder.The download component pulls down the second block and reuses the first unchanged block from the old package.

Wenn sich im größeren Umfang eine ganze Datei nicht ändert (bestimmt durch einen vollständigen Satz von Blöcken, die sich nicht ändern), kann diese Datei aus dem vorhandenen Paket wiederverwendet werden, sodass Zeit und Ressourcen gespart werden.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.

Einschränkungen für App-UpdatesApp update constraints

Updates werden innerhalb der gleichen Paketfamilie ausgeführt.Updates are performed within the same package family

Die Paketfamilie besteht aus dem Paketnamen und dem Herausgeber.The package family is comprised of the Package Name and Publisher. Damit die Aktualisierung erfolgen kann, müssen die Metadaten des neuen Pakets mit denen des zuvor installierten Pakets identisch sein.To be able to update, the new package metadata will need to be the same as the previously installed package.

App-Updates müssen auf eine höhere Version erhöht werden.App updates must increment to a higher version

Bei App-Updates muss im Allgemeinen die Version des neuen Pakets höher sein als die aktuelle Version.In general, app updates require the version of the new package to be higher than the current one. Beim Vorgang zum Aktualisieren von Apps ist es standardmäßig nicht zulässig, Pakete mit niedrigeren Versionen zu installieren.The app update process will not allow packages with lower versions to be installed by default. Ab Windows 10, Version 1809 können Sie die Installation von Paketen mit niedrigeren Versionen mit ForceUpdateToAnyVersion zulassen, wenn als Teil der Updateargumente ein Außerkraftsetzungsschalter angegeben wird.Starting in Windows 10 version 1809, you can use ForceUpdateToAnyVersion to allow lower version packages to be installed when an override switch is provided as part of the update arguments. Es ist aktuell in PowerShell über die Option ForceUpdateFromAnyVersion, über die PackageManager-API, über EnterpriseModernAppManagement CSP und in der AppInstaller-Datei verfügbar.It is currently available in PowerShell using the ForceUpdateFromAnyVersion option, via PackageManager API, EnterpriseModernAppManagement CSP and in the AppInstaller file.

Hinweis

Wenn Sie ForceUpdateToAnyVersion für eine App aus dem Windows Store anwenden, aktualisiert Windows automatisch auf die neueste gültige Version.If you use ForceUpdateToAnyVersion on an app from the Windows Store, Windows Update will automatically update the to the latest applicable version.

Jedes App-Updatepaket kann eine unterschiedliche Architektur aufweisen.App update package can have a different architecture

Das Updatepaket für das aktuell installierte App-Paket kann eine unterschiedliche Architektur aufweisen, solange die neue Architektur unter dem Betriebssystem unterstützt wird, auf dem das Paket bereitgestellt wird.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. Zum Beispiel: Auf einem Gerät mit x64 Windows 10 ist eine x86-Version von MyFavApp (v1.0.0.0) installiert, und das Updatepaket (v2.0.0.0) weist die x64-Version auf: MyFavApp (v1.0.0.0) wird erfolgreich auf MyFavApp (v2.0.0.0) aktualisiert.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.

Pakete können vom MSIX-Format auf das MSIXbundle-Format aktualisiert werdenPackages can update from an MSIX to an MSIXbundle

Ein Updatepaket kann von einem MSIX-Paket in ein MSIXbundle-Paket geändert werden, jedoch nicht umgekehrt.An update package can go from MSIX package to an MSIXbundle package but not vice-versa. Wenn ein MSIXbundle-Paket installiert ist, muss das Updatepaket ein Bündel bleiben.When an MSIXbundle is installed, the package update will need to remain a bundle.

Optimieren der Technologie der differenziellen AktualisierungOptimize differential update technology

Es gibt mehrere Möglichkeiten, sicherzustellen, dass die Technologie der differenziellen Aktualisierung bis zum Maximum optimiert ist.There are a few ways to ensure that the differential update technology is optimized to the max.

  • Halten Sie die Dateien im Paket klein: Dadurch wird sichergestellt, dass selbst bei einer erforderlichen Änderung, die sich auf die gesamte Datei auswirkt, das Update weiterhin klein ist.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.
  • Änderungen an Dateien sollten nach Möglichkeit additiv sein: Durch additive Änderungen wird sichergestellt, dass nur die entsprechenden geänderten Blöcke auf die Endbenutzergeräte heruntergeladen werden.Changes to files should be additive if possible - additive changes will ensure that end-user devices only download those changed blocks.
  • Änderungen an Dateien sollten nach Möglichkeit in 64-KB-Blöcken enthalten sein: Wenn die App große Dateien enthält und Änderungen in der Mitte einer Datei erforderlich sind, sind in einem Satz von Blöcken enthaltene Änderungen äußerst hilfreich.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.