Updates für App-Pakete

Das Aktualisieren moderner Windows App-Pakete ist optimiert, um sicherzustellen, dass nur die wesentlichen geänderten Bits der App heruntergeladen werden, um eine vorhandene Windows App zu aktualisieren.

Metadaten in der datei AppxBlockMap.xml

Auf hoher Ebene wird während der Paketerstellung ein Metadatenelement erstellt und in der App-Paketdatei (.appx oder MSIX) gespeichert, mit der Teile des Pakets durch Windows eindeutig identifiziert werden können. Beim Aktualisieren eines App-Pakets verwendet Windows die Metadatendatei, um das alte Paket mit dem neuen Paket zu vergleichen und zu bestimmen, was auf das Gerät heruntergeladen werden muss.

Da mit den Metadaten Teile des Pakets eindeutig identifiziert werden können, bedeutet dies, dass die Differenzialaktualisierungsmaschinen von jeder Version eines Pakets bis zu jeder anderen Version eines Pakets vollständig funktionieren (vorausgesetzt, das Quellpaket hat eine niedrigere Version als das Zielpaket).

Die Metadaten sind in der AppxBlockMap.xml-Datei (die oben genannten Metadaten) enthalten. Die AppxBlockMap.xml Datei ist eine XML-Datei, die eine zweidimensionale Liste mit Informationen zu Dateien im Paket enthält. Die erste Dimension enthält ausführliche Details zu der Datei (z. B. Name und Größe), und die zweite Dimension stellt SHA2-256-Hashdarstellungen jedes 64 KB-Slices dieser Datei bereit (der "Block").

Hier sehen Sie ein Beispiel für eine AppxBlockMap.xml Datei.

<!--?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) verfügt über zwei Blockhashes. Der erste Hash stellt den ersten 64 KB-Block der Datei dar, und der zweite Hash stellt die verbleibenden 35 KB dar , wenn die Datei 101188 Bytes ist.

Wenn der zweite Block dieser Datei geändert wird, wird der Hash während einer Aktualisierung ebenfalls aktualisiert, um dies widerzuspiegeln. Die Downloadkomponente zieht den zweiten Block nach unten und verwendet den ersten unveränderten Block aus dem alten Paket wieder.

Wenn sich eine gesamte Datei nicht ändert (bestimmt durch einen vollständigen Satz von Blöcken, die nicht geändert werden), kann diese Datei im vorhandenen Paket wiederverwendet werden, wodurch Zeit und Ressourcen gespart werden.

Einschränkungen für App-Updates

Updates werden innerhalb derselben Paketfamilie ausgeführt.

Der Paketfamilienname besteht aus dem Paketnamen und Publisher. Um aktualisieren zu können, müssen die neuen Paketmetadaten mit dem zuvor installierten Paket identisch sein. Es folgt ein Beispiel für einen Paketfamiliennamen: Contoso.ContosoApp_8wekyb3d8bbwe.

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

Im Allgemeinen erfordern App-Updates, dass die Version des neuen Pakets höher ist als die aktuelle. Der App-Updateprozess lässt nicht zu, dass Pakete mit niedrigeren Versionen standardmäßig installiert werden. Ab Windows 10 Version 1809 können Sie ForceUpdateToAnyVersion verwenden, um zuzulassen, dass Pakete mit niedrigerer Version installiert werden, wenn eine Außerkraftsetzungsoption als Teil der Updateargumente bereitgestellt wird. Sie ist derzeit in PowerShell mit der Option "ForceUpdateFromAnyVersion " über die PackageManager-API, enterpriseModernAppManagement CSP und in der Datei "AppInstaller" verfügbar.

Hinweis

Wenn Sie ForceUpdateToAnyVersion für eine App aus dem Microsoft Store verwenden, wird Windows Update die App automatisch auf die neueste anwendbare Version aktualisieren.

App-Updatepaket kann eine andere Architektur aufweisen

Das Updatepaket für das derzeit installierte App-Paket kann eine andere Architektur haben, solange die neue Architektur auf dem Betriebssystem unterstützt wird, in dem es bereitgestellt wird. Beispiel: Wenn Sie x86-Version von MyFavApp(v1.0.0.0) auf einem x64-Windows 10-Gerät installiert haben und das Updatepaket(v2.0.0.0) x64-Version ist: MyFavApp(1.0.0.0) wird erfolgreich auf MyFavApp(v2.0.0.0) aktualisiert.

Pakete können von einem MSIX auf einen MSIXbundle aktualisiert werden.

Ein Updatepaket kann von MSIX-Paket zu einem MSIXbundle-Paket wechseln, aber nicht umgekehrt. Wenn ein MSIXbundle-Paket installiert ist, muss das Updatepaket ein Bündel bleiben.

Optimieren der Technologie der differenziellen Aktualisierung

Es gibt einige Möglichkeiten, um sicherzustellen, dass die differenzielle Updatetechnologie auf den maximalen Wert optimiert ist.

  • Speichern Sie Dateien im Paket klein . Dadurch wird sichergestellt, dass bei Bedarf eine Änderung erforderlich ist, die sich auf die vollständige Datei auswirken würde, das Update immer noch klein wäre.
  • Änderungen an Dateien sollten nach Möglichkeit additiv sein – additive Änderungen stellen sicher, dass Endbenutzergeräte nur diese geänderten Blöcke herunterladen.
  • Änderungen an Dateien sollten nach Möglichkeit auf 64-KB-Blöcke beschränkt sein – wenn Ihre App große Dateien hat und Änderungen in der Mitte einer Datei erforderlich sind, hilft es erheblich, die Änderungen auf eine Gruppe von Blöcken zu konzentrieren.