jueves, 16 de agosto de 2012

Actualizar versiones anteriores de aplicaciones en .NET

Buenas voy a retomar la escritura de artículos en mi blog para tratar un tema bastante cortito pero interesante que es cómo crear un proyecto de instalación en .NET que nos permita actualizar versiones anteriores de nuestra aplicación. En sí es la continuación de post anterior pero ahora voy a añadir la explicación de cómo poder actualizar nuestras aplicaciones de forma fácil, si lo que hemos distribuido a nuestros clientes es un archivo de instalación que les ha instalado en su ordenador nuestra aplicación.
Pues bien la gran diferencia de las aplicaciones de Windows Forms con las aplicaciones web es que si tienes una aplicación web y tienes que modificarla o actualizarla el proceso es mucho más simple ya que modificas el archivo que tienes que cambiar en local y lo vuelves a subir al servidor o lo modificas directamente en el servidor y una vez hecho esto tus cambios estarán disponibles al momento para todos los usuarios que se conecten a tu servidor. En cambio en las aplicaciones para Windows Forms hay que actualizar los archivos instalados en cada ordenador y este proceso puede ser más costoso.
Pues bien voy a partir de un simple formulario con 3 cajas de texto y un botón, para sumar el contenido de las cajas de texto y mostar el resultado, nada del otro mundo. Lo que voy a hacer es agregar un nuevo proyecto de instalación, que ya expliqué en un post anterior como se hacía, lo voy a configurar cambiando algunas propiedades como el nombre del autor, el nombre del producto y que me desinstale las versiones anteriores de la aplicación y además voy recordar como añadir accesos directos. Pues bien una vez generado el proyecto voy a explicar cómo distribuir la aplicación para que el cliente la instale en su ordenador. Hasta aquí nada nuevo, lo nuevo será explicar cómo hacer cambios en la aplicación y distribuirla para que cuando se instale en el ordenador del usuario final desinstale la versión anterior, eso sí sin borrar archivos como bases de datos y demás información que el usuario haya guardado y no quiera ser borrada, e instale la nueva versión actualizada.
Los puntos más interesantes es que si en el proyecto de instalación que creas cambias la propiedad 'RemovePreviousVersion' a True, el instalador cuando detecte una versión anterior de la aplicación no la va a desinstalar automáticamente si en la propiedad 'Product Code' el código es el mismo. Te dirá que has de ir a 'Agregar y quitar programas'  para desinstalarla tu manualmente y el programa no continuará. Si el 'Product Code' no es el mismo no tenemos garantias que actualize todos los ficheros de la aplicación a menos que nos descarguemos el programa Orca.msi y nosotros modifiquemos el archivo .msi añadiéndole a la table 'property' la propiedad REINSTALLMODE y el valor amus. Lo mismo también se puede hacer modificando el archivo .msi desde la consola de MSDOS y escribiendo msiexec.exe /i [nombre del archivo].msi REINSTALLMODE=amus y pulsar intro.
 Otro punto interesante es el hecho que queramos que algunos archivos de la aplicación no se borren cuando se desinstale, como pueden ser bases de datos -a menos que hagamos una copia de seguridad antes-, archivos de configuración, etc. Para ello si estoy en mi proyecto de instalación, en este caso estoy en los 'Archivos de contenido' busco la propiedad Permanent y cambio el valor a True y con eso ya lo conseguimos.
Para explicar todo esto cuelgo el siguiente vídeo donde todo quedará más claro y verás que es mucho más sencillo de lo que parece.

Bueno ya sé que he estado sin colgar nada durante bastante tiempo básicamente por motivos de mucho trabajo y de estudios pero he querido retomar un poco las publicaciones en este blog para ir colgando cosas interesantes y quiero empezar dentro de poco a explicar no sólo como crear aplicaciones de escritorio sino también sitios web, ya sea aspx o php-mysql, que son las 2 tecnologías que más estoy usando en los últimos meses de trabajo.