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.
fonte
2009-08-18 09:18:38