Aggiornamento automatico applicazioni .NET

Siamo in un processo di sviluppo di un sistema molto complesso costituito da diversi servizi WCF, applicazioni ASP.NET MVC, strumenti di amministrazione (app Windows Form) … Alcuni di questi avranno istanze in esecuzione su diversi server. Stiamo cercando una buona soluzione di aggiornamento automatico per un tale sistema. Molto probabilmente, avremmo bisogno di un’applicazione di aggiornamento automatico (servizio) separata che svolgerà il lavoro, o di un’applicazione di amministrazione centralizzata che saprà sulle versioni di tutte le istanze installate e farà l’aggiornamento in remoto. C’è qualche buon prodotto / libreria, realizzato per questo scopo, di cui sei a conoscenza o con cui hai esperienza?

Personalmente sto usando una metodologia molto semplice per qualsiasi tipo di aggiornamento automatico:

  • Avere un installatore
  • Controlla la nuova versione (semplice WebClient e confronta i numeri con la tua attuale AssemblyVersion)
  • Se la versione è più alta scarica l’ultimo programma di installazione (dovrebbe essere su SSL per motivi di sicurezza)
  • Esegui il programma di installazione scaricato e chiudi l’applicazione. (in questa fase devi avere i privilegi di amministratore se il tuo programma di installazione richiede che tu sia un amministratore)

L’installatore dovrebbe occuparsi del resto. In questo modo avrai sempre la versione più recente e un programma di installazione con una versione più recente.

Vorrei iniziare dicendo che sono il fondatore dell’azienda che ha una soluzione di aggiornamento completa che include:

  • Un programma di aggiornamento open source, wyUpdate , scritto in C # [licenza BSD]
  • Il controllo open source AutomaticUpdater che puoi semplicemente aggiungere al modulo della tua app .NET [licenza LGPL]
  • wyBuild è usato per creare patch e gestire le tue versioni

wyUpdate gestisce tutti i problemi di Vista / Windows 7 UAC e tutti i problemi relativi ai permessi dei file che si presentano inevitabilmente quando si tenta di aggiornare software complessi.

Offriamo inoltre licenze gratuite a wyBuild per progetti open source , ma se stai solo cercando di creare il tuo programma di aggiornamento, puoi cannibalizzare il nostro codice sorgente liberamente.

Detto questo, se vuoi creare il tuo programma di aggiornamento ecco alcuni suggerimenti:

Costruire il proprio programma di aggiornamento

Un buon punto di partenza è il codice sorgente wyUpdate e AutomaticUpdater che ho menzionato sopra. Puoi cannibalizzarlo e usarlo per i tuoi scopi. Alcuni degli algoritmi in esso contenuti:

  • Supporto completo per UAC Windows Vista / Windows 7
  • Capacità per gli utenti limitati di controllare e quindi aggiornare se hanno credenziali
  • Supporto per la stravagante rete aziendale. (Se hai mai lavorato con una società questo è un vero problema).
  • Estrazione, patching e installazione rapidi dei file.
  • Supporto per il registro.
  • Ripristina i file e il registro in caso di errore o annullamento da parte dell’utente
  • Aggiornamento automatico (nessun file lasciato indietro)

Abbiamo anche le specifiche del file qui .

Aggiornamento automatico

Poiché essere automatico è un requisito, lascia che ti dica come lo facciamo con il nostro controllo AutomaticUpdater .

Utilizziamo pipe denominate per comunicare tra l’aggiornamento autonomo (wyUpdate) e il controllo Automatic Updater che si trova nel modulo del programma. wyUpdate riporta i progressi all’Aggiornatore automatico e l’Updater automatico può dire a wyUpdate di annullare il progresso, iniziare a scaricare, avviare l’estrazione, ecc.

Ciò mantiene il programma di aggiornamento separato dalla tua applicazione.

In effetti, il codice C # dei pipe con il nome esatto che usiamo è incluso in un articolo che ho scritto poco fa: app Multi-process C # come Google Chrome .

Ecco una soluzione open source che ho scritto per rispondere alle esigenze specifiche che avevamo per le app WinForm e WPF. L’idea generale è quella di avere la massima flessibilità, al minimo ansible.

Quindi, l’ integrazione è semplicissima e la libreria fa praticamente tutto per te, inclusa la sincronizzazione delle operazioni. È anche altamente flessibile e consente di determinare quali attività eseguire e in quali condizioni: si creano le regole (o ne si utilizzano alcune già esistenti). Infine, non ultimo, c’è il supporto per qualsiasi fonte di aggiornamenti (web, BitTorrent, ecc.) E qualsiasi formato di feed – qualsiasi cosa non sia implementata, puoi semplicemente scrivere tu stesso.

Anche gli aggiornamenti a freddo (che richiedono il riavvio dell’applicazione) sono supportati e eseguiti automaticamente a meno che non sia specificato “hot-swap” per l’attività.

Questo descrive una DLL inferiore a 70kb.

Maggiori dettagli su http://www.code972.com/blog/2010/08/nappupdate-application-auto-update-framework-for-dotnet/

Il codice è disponibile all’indirizzo http://github.com/synhershko/NAppUpdate (concesso in licenza con la licenza Apache 2.0)

Ho intenzione di estenderlo di più quando avrò ancora un po ‘di tempo, ma sinceramente dovresti essere in grado di migliorarlo rapidamente per quello che attualmente non supporta.

L’aggiornamento automatico dei servizi WCF e dei siti Web ASP.NET dovrebbe essere ansible anche con esso, utilizzando “hot-swap” di file e attività “iisreset” dove necessario.

ClickOnce per i tuoi strumenti di amministrazione.

Abbiamo esaminato una serie di opzioni e abbiamo deciso di utilizzare la libreria di aggiornamento di AppLife per il nostro progetto enterpise.

AppLife Update può aggiungere rapidamente e facilmente funzionalità di aggiornamento automatico per le app .NET, ma è anche flessibile grazie alla sua API completa.

Guarda l’elenco completo delle funzionalità e alcuni video dimostrativi sul loro sito web.

Per le semplici applicazioni WPF, quelle che potrebbero utilizzare Xcopy, è ansible utilizzare questo modulo AppUpdater . È un modulo sorgente, solo poche righe di codice, per aggiungere funzionalità di aggiornamento a una semplice app WPF.

È gratis.