Aggiornamenti dei pacchetti di app

L'aggiornamento dei pacchetti di app di Windows moderni è ottimizzato per garantire che per aggiornare un'app di Windows esistente vengano scaricati solo i bit modificati essenziali.

Metadati nel file AppxBlockMap.xml

A livello generale, durante la creazione del pacchetto, una porzione di metadati viene creata e archiviata nel file del pacchetto dell'app (con estensione appx o msix), consentendo a Windows di identificare in modo univoco le parti del pacchetto. Quando si aggiorna il pacchetto di un'app, Windows usa il file dei metadati per confrontare il vecchio e il nuovo pacchetto e stabilire quali elementi scaricare nel dispositivo.

Poiché i metadati consentono di identificare in modo univoco le parti del pacchetto, il meccanismo di aggiornamento differenziale funziona perfettamente da qualsiasi versione di un pacchetto a qualsiasi altra versione del pacchetto (presupponendo che il pacchetto di origine sia di una versione inferiore rispetto a quello di destinazione).

I metadati sono contenuti nel file AppxBlockMap.xml (i metadati menzionati in precedenza). AppxBlockMap.xml è un file XML che contiene un elenco bidimensionale di informazioni sui file nel pacchetto. La prima dimensione indica i dettagli generali sul file, ad esempio nome e dimensioni, mentre la seconda fornisce rappresentazioni hash SHA2-256 di ogni sezione da 64 KB, o blocco, del file.

Ecco un esempio di file 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>

Il primo file (asset1.jpg) ha due hash di blocco. Il primo hash rappresenta il primo blocco di 64 KB del file e il secondo hash rappresenta i 35 KB rimanenti, presupponendo che il file sia di 101188 byte.

Durante un aggiornamento, se il secondo blocco del file viene modificato, l'hash viene aggiornato di conseguenza. Il componente di download scarica il secondo blocco e riutilizza il primo blocco invariato dal pacchetto precedente.

Su vasta scala, se un intero file non viene modificato, ovvero se un intero set di blocchi resta invariato, viene riutilizzato il file del pacchetto esistente, consentendo di risparmiare tempo e risorse.

Vincoli per l'aggiornamento delle app

Gli aggiornamenti vengono eseguiti all'interno della stessa famiglia di pacchetti

Il nome della famiglia di pacchetti include il nome del pacchetto e l'editore. Per eseguire l'aggiornamento , i metadati del nuovo pacchetto devono essere gli stessi del pacchetto installato in precedenza. Di seguito è riportato un esempio di un nome di famiglia di pacchetti: Contoso.ContosoApp_8wekyb3d8bbwe.

Gli aggiornamenti delle app devono eseguire l'incremento a una versione successiva

In genere gli aggiornamenti delle app richiedono che la versione del nuovo pacchetto sia superiore rispetto a quella corrente. Per impostazione predefinita, il processo di aggiornamento delle app non consente di installare pacchetti con versioni inferiori. Avviando la versione 1809 in Windows 10, è possibile usare ForceUpdateToAnyVersion per installare pacchetti di versioni inferiori quando come parte degli argomenti di aggiornamento viene fornita un'opzione di override. È attualmente disponibile in PowerShell con l'opzione ForceUpdateFromAnyVersion, tramite l'API PackageManager o il CSP EnterpriseModernAppManagement e nel file AppInstaller.

Nota

Se usi ForceUpdateToAnyVersion in un'app di Windows Store, Windows Update eseguirà automaticamente l'aggiornamento alla versione più recente applicabile.

Il pacchetto di aggiornamento app può avere un'architettura differente

Il pacchetto di aggiornamento per il pacchetto dell'app attualmente installata può essere di un'architettura diversa, purché la nuova architettura sia supportata nel sistema operativo in cui viene distribuita. Ad esempio: Se hai la versione x86 di MyFavApp(v1.0.0.0) installata in un dispositivo Windows 10 x64 e il pacchetto di aggiornamento (v2.0.0.0) è per la versione x64: MyFavApp(1.0.0.0) verrà aggiornata correttamente a MyFavApp(v2.0.0.0).

I pacchetti possono eseguire l'aggiornamento da MSIX a MSIXbundle

Un pacchetto di aggiornamento può passare da pacchetto MSIX a pacchetto MSIXbundle, ma non viceversa. Quando viene installato un MSIXbundle, l'aggiornamento del pacchetto dovrà rimanere un bundle.

Ottimizzare la tecnologia di aggiornamento differenziale

Esistono vari modi per verificare che la tecnologia di aggiornamento differenziale sia ottimizzata.

  • Mantenere i file nel pacchetto di dimensioni contenute. Questo garantisce che, se fosse necessaria una modifica che influisce sull'intero file, l'aggiornamento continuerebbe a essere di piccole dimensioni.
  • Le modifiche ai file devono essere additive, se possibile. Le modifiche additive garantiscono che i dispositivi degli utenti finali scarichino solo i blocchi modificati.
  • Le modifiche ai file devono essere contenute in blocchi di 64 KB, se possibile. Se l'app ha file di grandi dimensioni e richiede modifiche nella parte centrale di un file, contenere le modifiche in un set di blocchi sarà di grande aiuto.