2009-04-15 10 views
8

Tengo un .NET CF 3.5 aplicación de Windows Mobile que mi cliente quiere tener características AutoUpdate.Cómo solicitud de actualización automática de Windows Mobile

Esto es lo que tengo hasta ahora:

  1. crear una CAB utilizando el Proyecto CAB de Smart Device (¿Es esto lo suficientemente bueno, o debería estar haciendo algo más aquí)

2. obtener el número de versión de la aplicación

Assembly.GetExecutingAssembly().GetName().Version.ToString(); 
  1. llamada a un servicio web WCF para hacer un número de versión mirar hacia arriba.
  2. descargar una nueva versión del archivo de la cabina.
  3. ???
  4. Ejecutar WCELoad.exe en el archivo CAB
  5. beneficio

Respuesta

9

Su solución es generalmente correcta, pero tiene algunos problemas.

  1. No puede actualizarse usted mismo. Tienes que cerrar y tener alguna aplicación otehr que te actualice para evitar el problema del intercambio de archivos. Esto generalmente se maneja teniendo una aplicación dedicada de "actualización" que ejecute. Puede ser el objetivo del ícono de la aplicación y, por lo tanto, realiza actualizaciones con cada lanzamiento, o puede iniciarse a través de un tipo de elemento de menú "verificar actualizaciones". De todos modos, debe ejecutarlo y asegurarse de que la aplicación real no se esté ejecutando.
  2. En general, es una buena idea proporcionar algún tipo de copia de seguridad en caso de una instalación corrupta e interrumpida
  3. Las actualizaciones de CAB van a requerir actualizaciones al por mayor de todo. Puede que esto no sea lo que quieres al final (es posible que desees actualizar solo un archivo, ensamblaje o lo que sea), así que comenzar con la lógica de tirar de los archivos individuales te hará mucho más extensible.

Un recurso antiguo, pero aún muy válido, es el MSDN article on creating self-updating applications de Alex Feinman.

2

Un equipo que estaba en esta implementado mediante la creación de una segunda aplicación móvil (fuera de la aplicación que se está actualizando) en los dispositivos móviles que estaba responsable de descargar y ejecutar los CAB.

  • En cada dock, la aplicación principal determinaba si necesitaba ser actualizado a través de una llamada de servicio web.
  • Si su versión estaba fuera de fecha, sería invocar la aplicación de actualización con el URI de la nueva versión para instalar y luego salir
  • La aplicación de actualización se descarga la nueva cabina y ejecutar las instalaciones/reinicios y modificaciones del registro como apropiado.

Esto funcionó para nosotros bastante bien.

4

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.

0

Tienes razón. después de wM5, 6 ... WCEload simplemente detiene la aplicación si está instalada, por lo que no es necesario detenerla manualmente. pero necesita instalar la actualización en modo silencioso porque si no, el usuario puede cancelarla, por lo que necesita el instalador silen cabina. Descárguelo desde

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

Cuestiones relacionadas