2010-09-20 10 views
5

Ho un sistema con due applicazioni Web, un servizio Web, un servizio Windows e un'applicazione WPF in esecuzione 24 ore al giorno su un touch screen. Tutti loro sono collegati a un database.Aggiornamento automatico

Desidero poter aggiornare tutte queste applicazioni caricando i file di aggiornamento nel database e impostando la data e l'ora per l'aggiornamento.

Ho un'idea su come farlo.

  1. Un'applicazione ha un thread in esecuzione per cercare gli aggiornamenti disponibili.
  2. Quando viene rilevato un aggiornamento, il file viene scaricato nel computer dell'applicazione.
  3. Al termine del download, le applicazioni attivano un riavvio.
  4. All'avvio dell'applicazione, cerca un file di aggiornamento sul computer locale.
  5. Se l'aggiornamento è disponibile, l'applicazione si aggiorna automaticamente.

Non sono proprio sicuro di come dovrebbero essere fatti tutti questi passaggi, in particolare l'ultimo. Ma voglio alcuni commenti su questo. È completamente sbagliato? Sono sulla buona strada? Qualche consiglio su come farlo in questo modo o in un altro modo?

+1

Sì, il tuo approccio è praticabile. A seconda delle dimensioni del file di aggiornamento, probabilmente non lo memorizzerei * nel * database, ma è solo un nitpick. – Piskvor

+0

Piskvor ha ragione, non vuoi memorizzarlo nel database. Ho pubblicato una risposta qui sotto che ti dice su ClickOnce. – Bronumski

+0

Considererei anche un modo per eseguire il rollback, in caso di aggiornamento fallito! Soprattutto se non si ha accesso fisico al dispositivo. – chriszero

risposta

1

Penso che stai andando verso il basso le linee giuste qui. Un'applicazione di polling per verificare il database dell'esistenza di un nuovo aggiornamento seguito da uno script di distribuzione di xcopy lo farebbe.

Questo potrebbe essere eseguibile anche da uno script PowerShell, che viene eseguito su una pianificazione, ad esempio ogni 10 minuti. Potrebbe controllare il database, chiudere il processo e il servizio, xcopy l'applicazione (da un'origine condivisa) e riavviare il suddetto servizio e app.

Tutto ciò presuppone che non si stia utilizzando Windows Installer per creare e distribuire inizialmente l'applicazione. Sebbene un xcopy per sostituire direttamente i binari non danneggi un pacchetto MSI, non è raccomandato. Utilizziamo la distribuzione MSI di AD al lavoro ed è un dolore nel migliore dei casi!

MSDN contiene riferimenti per la distribuzione MSI vs XCopy per le applicazioni WPF (nonché i requisiti di sicurezza).

Questo è stato il primo link che ho trovato per l'interrogazione SQL da PowerShell: http://elegantcode.com/2008/03/27/discovering-windows-powershell/

Buona fortuna!

0

Realmente vuoi eseguire un aggiornamento dal database o è solo una possibile soluzione? Stai reinventando la ruota.

Dai un'occhiata alla distribuzione ClickOnce, tutto ciò che serve è già fatto per te e integrato in VisualStudio. Se si utilizza qualcosa che esiste già, si ha il vantaggio della documentazione esistente, blog utili di persone che hanno già attraversato i punti critici e gli aggiornamenti e le correzioni.

ClickOnce Deployment

ClickOnce Deployment in .NET Framework 2.0

Come si desidera utilizzare ClickOnce dipende da ciò che si vuole uscirne.È possibile creare facilmente una distribuzione che controlli l'aggiornamento ogni volta che si esegue l'applicazione, ma è possibile anche con un po 'di codice che l'applicazione controlli gli aggiornamenti mentre è in esecuzione.

La versione di blocco dell'applicazione Updater menzionata da Dominic Zukiewicz è il cursore preliminare a ClickOnce.

EDIT

ClickOnce fornisce uno scenario di roll-back sia sul server e la fine del client. Il client può tornare a una versione precedente utilizzando la normale finestra di dialogo aggiungi programmi di rimozione e puoi facilmente ripubblicare una versione precedente.

+0

Sembra buono. Ma alcune cose che penso non funzionano nel mio scenario. Lo fa funzionare per tutti i nostri tipi di applicazioni (web, WPF, servizio)? Richiede l'accesso a Internet per tutte le applicazioni? Non è possibile scegliere quale installazione di sistema ottenere per l'aggiornamento? Potrei sbagliarmi su qualcosa qui. –

+0

Scusa se ho perso "Voglio essere in grado di aggiornare tutte queste applicazioni". Risposta breve no, useresti ClickOnce per un'applicazione client. Se si desidera aggiornare tutte le applicazioni nello stesso modo in cui si desidera rivedere la propria strategia di implementazione, raramente una soluzione adatta a tutte le dimensioni. Quello che posso dire è dall'esperienza quando si distribuisce a un utente finale. ClickOnce è uno strumento di distribuzione molto buono in cui tutti i nodi sono stati elaborati e fornisce un'esperienza utente molto buona. – Bronumski

+0

Lo guarderò ancora un po '. Tutto è meglio di ciò che facciamo oggi: VPN e desktop remoto per tutti i server di cui abbiamo bisogno e auto per i clienti in cui non disponiamo di accesso VPN. –

1

Avrete problemi a fare questo con ClickOnce. ClickOnce funzionerebbe solo per la tua app WPF, non può fare nulla con i servizi o l'applicazione web. Potresti scrivere un'app separata "Updater" distribuita da ClickOnce il cui compito è aggiornare le altre app, ma ciò sembra ancora un po 'incerto.

Può sembrare stupido, ma vorrei iniziare con la cosa più semplice che potessi pensare. Che ne dici di usare Dropbox per inviare i tuoi file di aggiornamento; quindi uno script AutoHotKey che viene eseguito all'avvio, guarda la cartella Dropbox per i nuovi aggiornamenti e li esegue?

Suoni hokey, ma è qualcosa che potresti provare in un'ora o due.

0

È possibile creare un altro servizio di Windows che esegue gli aggiornamenti su base giornaliera. Il servizio cercherebbe su una cartella specifica se ci sono aggiornamenti da elaborare. Ad esempio potrebbe cercare un file xml che indichi la nuova versione dell'applicazione e quali siano i file da aggiornare. Disattiva l'applicazione/i servizi, esegue il backup dei file che deve aggiornare, avvia l'applicazione/i servizi e pulisce i file di backup mantenendo almeno tre file di backup. Il servizio dovrebbe tenere traccia dell'ultima versione corrente installata, in modo che quando legge il file xml possa controllare se si tratta di un nuovo aggiornamento oppure no, basta semplicemente cancellare il file xml al suo completamento.

0

Che ne dici di Google Omaha? È uno strumento open source, attualmente utilizzato per inviare aggiornamenti di Google Chrome e Google Earth. Omaha può anche gestire l'installazione delle applicazioni. Una panoramica di design di alto livello può essere trovata here.

Problemi correlati