No es necesario crear una aplicación dedicada a actualizar, al menos no en WM 6 con .netcf 3.5. Estoy descargando un archivo .cab usando un servicio web y luego comienzo un nuevo proceso e invoco wceload para hacer una instalación silenciosa de la cabina.Este se encarga de cerrar mi aplicación en ejecución, desinstalarlo y luego realiza la instalación como se indica en MSDN docs here
En Windows Mobile versión 5.0 y posterior, cuando se utiliza Wceload.exe para volver a instalar un archivo .cab, WCELOAD. exe desinstala la versión previamente instalada del archivo .cab antes de instalar la nueva versión. Durante la parte de desinstalación de este proceso, Wceload.exe cierra los archivos ejecutables actualmente en ejecución que se instalaron en el dispositivo de destino utilizando un archivo .cab, en función de su nombre de archivo. Wceload.exe también cierra los ejecutables que son el objetivo de una operación de archivo, como un movimiento o una copia. Para cerrar un ejecutable, Wceload.exe envía WM_CLOSE a todas las ventanas de nivel superior que pertenecen al proceso. Si el proceso no finaliza de manera oportuna después de recibir el mensaje WM_CLOSE, Wceload.exe lo cierra forzosamente al llamar a TerminateProcess. Wceload.exe no intenta cerrar ejecutables que se envían en la imagen de tiempo de ejecución en el dispositivo de destino.
También tengo un cesetup.dll para la limpieza adicional de archivos durante la desinstalación.
El gran problema que tengo es que no puedo cambiar la carpeta de instalación de mi aplicación cuando hago una instalación silenciosa y la propiedad% installDir% de mi archivo .inf está predeterminada. Y construir un .cab por separado para cada dispositivo que quiera actualizar no es una solución bonita.