Updates für App-Pakete

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.

Metadaten in der Datei „AppxBlockMap.xml“

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. 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.

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).

Die Metadaten sind in der Datei „AppxBlockMap.xml“ enthalten (die oben genannten Metadaten). Bei der Datei „AppxBlockMap.xml“ handelt es sich um eine XML-Datei mit einer zweidimensionalen Liste von Informationen zu den Dateien im Paket. 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“).

Nachfolgend ein Beispiel für die Datei „AppxBlockMap.xml“.

<!--?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.

Wenn bei einer Aktualisierung der zweite Block dieser Datei geändert wird, wird auch der Hash entsprechend aktualisiert. Die Downloadkomponente ruft den zweiten Block ab und verwendet den ersten unveränderten Block des alten Pakets wieder.

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.

Einschränkungen für App-Updates

Updates werden innerhalb der gleichen Paketfamilie ausgeführt.

Der Name der Paketfamilie setzt sich aus dem Paketnamen und dem Herausgeber zusammen. Damit die Aktualisierung erfolgen kann, müssen die Metadaten des neuen Pakets mit denen des zuvor installierten Pakets identisch sein. Hier sehen Sie ein Beispiel für einen Paketfamiliennamen: Contoso.ContosoApp_8wekyb3d8bbwe.

App-Updates müssen auf eine höhere Version erhöht werden.

Bei App-Updates muss im Allgemeinen die Version des neuen Pakets höher sein als die aktuelle Version. Beim Vorgang zum Aktualisieren von Apps ist es standardmäßig nicht zulässig, Pakete mit niedrigeren Versionen zu installieren. 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. Es ist aktuell in PowerShell über die Option ForceUpdateFromAnyVersion, über die PackageManager-API, über EnterpriseModernAppManagement CSP und in der AppInstaller-Datei verfügbar.

Hinweis

Wenn Sie ForceUpdateToAnyVersion für eine App aus dem Windows Store anwenden, aktualisiert Windows automatisch auf die neueste gültige Version.

Jedes App-Updatepaket kann eine unterschiedliche Architektur aufweisen.

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. 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.

Pakete können vom MSIX-Format auf das MSIXbundle-Format aktualisiert werden

Ein Updatepaket kann von einem MSIX-Paket in ein MSIXbundle-Paket geändert werden, jedoch nicht umgekehrt. Wenn ein MSIXbundle-Paket installiert ist, muss das Updatepaket ein Bündel bleiben.

Optimieren der Technologie der differenziellen Aktualisierung

Es gibt mehrere Möglichkeiten, sicherzustellen, dass die Technologie der differenziellen Aktualisierung bis zum Maximum optimiert ist.

  • 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.
  • Ä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.
  • Ä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.