2009-04-15 12 views
8

Ho un .net cf 3.5 Applicazione Windows Mobile che il mio cliente desidera avere funzionalità di aggiornamento automatico.Come aggiornare automaticamente l'applicazione Windows Mobile

Ecco quello che ho finora:

  1. creare un CAB utilizzando il progetto CAB Smart Device (è questo abbastanza buono, o dovrei fare qualcos'altro qui)

2. Prendi il numero di versione dell'applicazione

Assembly.GetExecutingAssembly().GetName().Version.ToString(); 
  1. chiamare un servizio web WCF per fare un numero di versione sguardo.
  2. Scaricare una nuova versione del file cab.
  3. ???
  4. Esegui WCELoad.exe sul file CAB
  5. Profit

risposta

9

La soluzione è generalmente corretta, ma presenta alcuni problemi.

  1. Non puoi aggiornare autonomamente. Devi chiudere e avere qualche altra app per aggiornarti per evitare il problema della condivisione dei file. Questo di solito è gestito da un'app dedicata "updater" che si avvia. Potrebbe essere l'obiettivo dell'icona dell'app e quindi esegue aggiornamenti ad ogni avvio, oppure può essere avviato tramite un tipo di elemento di menu "verifica aggiornamenti". Indipendentemente da ciò, devi avviarlo e assicurarti che l'app non sia in esecuzione.
  2. Generalmente è consigliabile fornire una qualche forma di backup in caso di installazione corrotta e interrotta.
  3. Gli aggiornamenti CAB richiederanno aggiornamenti all'ingrosso di tutto. Questo potrebbe non essere quello che vuoi alla fine (potresti voler aggiornare solo un singolo file, un assembly o qualsiasi altra cosa), quindi partire dalla logica di tirare giù i singoli file ti renderà più estensibile.

Una risorsa vecchia, ma ancora molto valida, è la MSDN article on creating self-updating applications di Alex Feinman.

2

Un team ero su implementato questo con la creazione di una seconda applicazione per cellulare (al di fuori dell'applicazione che viene aggiornata) sui dispositivi mobili che era responsabile per il download e l'esecuzione di CAB.

  • Su ogni dock, l'app principale determinava se doveva essere aggiornata tramite una chiamata al servizio web.
  • Se la sua versione non era aggiornata, invocerebbe l'app di aggiornamento con l'URI della nuova versione da installare e quindi uscirà
  • L'app di aggiornamento scaricherà il nuovo CAB ed eseguirà le installazioni/riavvii e le modifiche del registro come adeguata.

Questo ha funzionato abbastanza bene per noi.

4

Non è necessario creare un'app dedicata per l'aggiornamento, almeno non su WM 6 con .netcf 3.5. Sto scaricando il file .cab usando un webservice e poi avvio un nuovo processo e invoco wceload per eseguire un'installazione silenziosa della cabina.Questo si prende cura di chiudere la mia applicazione in esecuzione, disinstallarlo e quindi esegue l'installazione come indicato nel MSDN docs here

In Windows Mobile versione 5.0 e versioni successive, quando si utilizza Wceload.exe per reinstallare un file CAB, WCELOAD. exe disinstalla la versione precedentemente installata del file .cab prima di installare la nuova versione. Durante la parte di disinstallazione di questo processo, Wceload.exe chiude tutti gli eseguibili attualmente in esecuzione che sono stati installati sul dispositivo di destinazione utilizzando un file CAB, in base al relativo nome file. Wceload.exe inoltre chiude tutti i file eseguibili che sono la destinazione di un'operazione di file, come una mossa o una copia. Per chiudere un eseguibile, Wceload.exe invia WM_CLOSE a tutte le finestre di livello superiore di proprietà del processo. Se il processo non esce in modo tempestivo dopo aver ricevuto il messaggio WM_CLOSE, Wceload.exe lo chiude forzatamente chiamando TerminateProcess. Wceload.exe non tenta di chiudere gli eseguibili che vengono spediti nell'immagine di runtime sul dispositivo di destinazione.

Ho anche un cesetup.dll per la pulizia aggiuntiva dei file durante la disinstallazione.

Il grosso problema che ho è che non posso cambiare la cartella di installazione per la mia app quando si esegue un'installazione invisibile all'utente e per impostazione predefinita la proprietà% installDir% dal mio file .inf. E costruire una cab separata per ogni dispositivo che vuole aggiornare non è una soluzione carina.

0

Hai ragione. dopo wM5, 6 ... WCEload interrompe l'applicazione solo se è installata, quindi non è necessario interromperla manualmente. ma è necessario installare l'aggiornamento in modalità silenziosa perché altrimenti l'utente può annullarlo, quindi è necessario il programma di installazione della cabina di silen. scaricarlo da

http://cssoft.freehosting.net/website2/default.html