Lavorando con le applicazioni desktop o mobile, ci sono alcuni scenari che possono capitare frequentemente:
- dover sincronizzare un rilascio di un aggiornamento con un cambiamento di schema del database, in modo che non ci siano perdite di dati all'interno del database sul backend;
- la necessità di distribuire una versione completamente nuova dell'applicazione in una data specifica.
In entrambi i casi, non si vuole più rendere disponibile una parte o l'intera applicazione a tutti gli utenti, per questo sono nati strumenti come gli update obbligatori all'interno del Windows Dev Center e, a partire dalla versione 1607 di Windows 10, le API per il controllo ed il download degli aggiornamenti.
private async Task CheckAndDownloadUpdatesAsync() { var storeContext = StoreContext.GetDefault(); var updates = await storeContext.GetAppAndOptionalStorePackageUpdatesAsync(); if (updates.Any()) { // ci sono aggiornamenti disponibili... // procediamo con il download... var downloadOperation = await storeContext.RequestDownloadStorePackageUpdatesAsync(updates); if (downloadOperation.OverallState == StorePackageUpdateState.Completed) { // tutti i pacchetti sono stati scaricati con successo // provo ad installare solo quelli obbligatori var installOperation = await storeContext.RequestDownloadAndInstallStorePackageUpdatesAsync(updates.Where(x => x.Mandatory)); if (installOperation.OverallState == StorePackageUpdateState.Completed) { // installazione completata con successo... // si può riavviare l'applicazione } } } }
Il codice messo in evidenza qui sopra è piuttosto esplicativo e la sequenza delle operazioni è semplice: come prima cosa, viene richiesto il contesto relativo allo Store, quindi tramite l'API GetAppAndOptionalStorePackageUpdatesAsync si cercano tutti gli update disponibili per l'applicazione. Una volta recuperati gli aggiornamenti, questi vengono scaricati tramite RequestDownloadStorePackageUpdatesAsync e, se il download è andato a buon fine, vengono installati tutti gli aggiornamenti che sono stati marcati all'interno del Windows Dev Center come obbligatori.
E' evidente che, se gli aggiornamenti sono obbligatori e il loro download non è andato a buon fine, possiamo controllare e modificare il flusso di esecuzione dell'applicazione ed evitare che l'utente possa, riprendendo l'esempio di prima, scrivere dentro il database (dato che lo schema può essere cambiato) o vedere una interfaccia vecchia che non vogliamo più distribuire.
Ci sono solo due piccoli dettagli alla quale bisogna prestare un minimo di attenzione:
- la chiamata a GetAppAndOptionalStorePackageUpdatesAsync potrebbe non ritornare immediatamente i pacchetti disponibili al download, ci potrebbe essere un ritardo fino ad un giorno tra il momento della certificazione all'interno del Windows Dev Center a quando questo è visibile all'interno dell'API;
- La chiamata a RequestDownloadStorePackageUpdatesAsync non è obbligatoria, si può chiamare direttamente la RequestDownloadAndInstallStorePackageUpdatesAsync che è in grado di scaricare ed installare i pacchetti in sequenza, se non sono già stati scaricati in precedenza, mostrando il classico messaggio di conferma all'utente prima di procedere.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Evitare il flickering dei componenti nel prerender di Blazor 8
Sostituire la GitHub Action di login su private registry
Effettuare il refresh dei dati di una QuickGrid di Blazor
Gestire il colore CSS con HWB
Disabilitare automaticamente un workflow di GitHub
Utilizzare i primary constructor in C#
Utilizzare i primary constructor di C# per inizializzare le proprietà
Gestire domini wildcard in Azure Container Apps
Utilizzare un service principal per accedere a Azure Container Registry
Hosting di componenti WebAssembly in un'applicazione Blazor static
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Creare un'applicazione React e configurare Tailwind CSS
I più letti di oggi
- Accedere con ASP.NET ad un documento XML creato dall'oggetto recordset di ADO e ASP
- Richiamare programmaticamente le operazioni di aggiornamento, eliminazione e inserimento di FormView, DetailsView e GridView
- Aumentare la scalabilità di ASP.NET Core Web API con caching client side
- Visualizzare contenuti Fullscreen con HTML5
- Disabilitare un bottone in una pagina HTML pensando all'accessibilità
- Realizzare siti sicuri con ASP.NET Web Pages
- Focus dei tag input con HTML5
- Disponibile la beta di Silverlight 5
- Ricavare lo spazio occupato su disco dal nostro sito