Aktualizace balíčků aplikací

Aktualizace moderních balíčků aplikací Windows je optimalizovaná, aby se zajistilo, že se stáhnou jenom základní změněné bity aplikace, aby se aktualizovala stávající Windows aplikace.

Metadata v souboru AppxBlockMap.xml

Na vysoké úrovni se při vytváření balíčku vytvoří a uloží část metadat v souboru balíčku aplikace (.appx nebo .msix), která umožňuje jedinečně identifikovat části balíčku Windows. Při aktualizaci balíčku aplikace Windows použije soubor metadat k porovnání starého balíčku s novým balíčkem a určení, co je potřeba stáhnout do zařízení.

Vzhledem k tomu, že metadata umožňují jedinečně identifikovat části balíčku, znamená to, že rozdílové aktualizační stroje plně fungují z jakékoli verze balíčku na jakoukoli jinou verzi balíčku (za předpokladu, že zdrojový balíček má nižší verzi než cílový balíček).

Metadata jsou obsažena v souboru AppxBlockMap.xml (výše uvedená metadata). Soubor AppxBlockMap.xml je soubor XML, který obsahuje dvourozměrný seznam informací o souborech v balíčku. První dimenze obsahuje podrobné informace o souboru (např. název a velikost) a druhá dimenze poskytuje reprezentaci hash SHA2-256 každého řezu 64 kB daného souboru ("blok").

Tady je ukázka souboru 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>

První soubor (asset1.jpg) má dva blokové hashe. První hodnota hash představuje první blok 64KB souboru a druhá hodnota hash představuje zbývající 35 kB – vzhledem k tomu, že soubor je 101188 bajty.

Pokud se během aktualizace upraví druhý blok tohoto souboru, hodnota hash se také aktualizuje tak, aby odrážela tuto hodnotu. Komponenta pro stažení stáhne druhý blok a znovu použije první nezměněný blok ze starého balíčku.

Pokud se celý soubor ve větším měřítku nezmění (určuje se úplná sada bloků, které se nemění), lze tento soubor znovu použít z existujícího balíčku, což šetří čas a prostředky.

Omezení aktualizace aplikací

Aktualizace se provádějí ve stejné rodině balíčků.

Název rodiny balíčků se skládá z názvu balíčku a Publisher. Aby bylo možné aktualizovat, musí být nová metadata balíčku stejná jako dříve nainstalovaný balíček. Následuje příklad názvu rodiny balíčků: Contoso.ContosoApp_8wekyb3d8bbwe.

Aktualizace aplikací musí být navýšeny na vyšší verzi.

Obecně platí, že aktualizace aplikací vyžadují, aby verze nového balíčku byla vyšší než aktuální. Proces aktualizace aplikace nepovolí instalaci balíčků s nižšími verzemi ve výchozím nastavení. Počínaje verzí 1809 systému Windows 10 můžete použít ForceUpdateToAnyVersion k povolení instalace balíčků starší verze, pokud je jako součást argumentů aktualizace poskytnut přepínač pro přepsání. Aktuálně je k dispozici v PowerShellu pomocí možnosti ForceUpdateFromAnyVersion prostřednictvím rozhraní PACKAGEManager API, EnterpriseModernAppManagement CSP a v souboru AppInstaller.

Poznámka:

Pokud používáte ForceUpdateToAnyVersion v aplikaci z Windows Storu, služba Windows Update automaticky aktualizuje na nejnovější použitelnou verzi.

Balíček aktualizace aplikací může mít jinou architekturu

Balíček aktualizace pro aktuálně nainstalovaný balíček aplikace může být jiné architektury, pokud je nová architektura podporována v operačním systému, do kterého se nasazuje. Příklad: Pokud máte na zařízení s Windows 10 x64 nainstalovanou x86 verzi MyFavApp(v1.0.0.0) a balíček aktualizace (v2.0.0.0) je ve verzi x64: MyFavApp(v1.0.0.0) bude úspěšně aktualizován na MyFavApp(v2.0.0.0).

Balíčky se můžou aktualizovat z MSIX na MSIXbundle

Balíček aktualizace může přejít z balíčku MSIX na balíček MSIXbundle, ale ne naopak. Při instalaci balíčku MSIXbundle bude aktualizace muset zůstat balíčkem.

Optimalizace technologie rozdílových aktualizací

Existuje několik způsobů, jak co nejefektivněji zajistit technologii rozdílových aktualizací.

  • Udržujte soubory v balíčku malé – tím zajistíte, že pokud je potřeba provést změnu, která by ovlivnila celý soubor, bude aktualizace stále malá.
  • Pokud je to možné, měly by být změny souborů sčítány – tak zajistíte, že zařízení koncových uživatelů stahovala jenom ty změněné bloky.
  • Pokud je to možné, měly by být změny souborů obsaženy na 64 kB blocích – pokud vaše aplikace obsahuje velké soubory a vyžaduje změny uprostřed souboru, které obsahují změny sady bloků, výrazně vám to pomůže.