2010-10-25 23 views
7

Por lo tanto, tengo esta aplicación para la cual estamos produciendo versiones de desarrollo adicionales.Diferenciando entre desinstalar/instalar y actualizar una aplicación

Si la aplicación es desinstalada por el usuario (desde Agregar/Eliminar programas digamos), entonces quiero que la aplicación elimine cierta carpeta en el sistema de archivos que contiene información relacionada con la aplicación.

Sin embargo, si la aplicación se actualiza (descargando un instalador más nuevo para esta aplicación e instalándola), entonces quiero que mantenga esa carpeta.

Tengo la impresión (por el momento) de que no es posible diferenciar entre desinstalar/instalar y simplemente actualizar una aplicación de una versión a otra, porque los proyectos de implementación .NET tratan la actualización como simplemente otra desinstalación/instalación procedimiento, pero esto debería ser posible de alguna manera.

Gracias por tomarse el tiempo y las respuestas que pueda obtener.

Respuesta

0

he finalmente también encontró una manera de comprobar si la aplicación está mejorando o si se trata de una instalación nueva:

  • La aplicación deja un poco de información acerca de sí misma en el registro (nombre de la aplicación, el número de versión etc.). Esto se almacena por lo general dentro

LocalMachine \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ {GUID de Aplicación}

Cuando se desinstala la aplicación que la información se elimina.

  • Pero puede verificar esa información cuando instale una versión de su aplicación (esto se puede hacer agregando algunas acciones personalizadas en el proyecto de implementación). Puedo comprobar que bajo el método beforeInstall y miro en el Registro para el valor DisplayVersion, así:


RegistryKey regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{AppGUIDHere}"); 
string version = (string)regKey.GetValue("DisplayVersion"); 

  • Este valor contendrá la versión que está instalada actualmente en el equipo. Si esta versión instalada es más pequeña que la versión de la aplicación que está tratando de instalar, siga la ruta lógica de ACTUALIZACIÓN

  • Si no puede encontrar nada en el registro debajo de esa clave, significa que esto es una nueva instalación (no hay otra aplicación antes de esta instalada en la computadora). Y aquí sigue la otra ruta lógica de solo instalar

Espero que esto ayude a alguien.

+0

Fuera de interés, ¿es DisplayVersion el valor de la configuración ProductVersion en el paquete de instalación? – Rikalous

+0

No creo que la aplicación reciba DisplayVersion (porque no tiene el mismo formato, es decir, DisplayVersion tiene 4 puntos que separan las versiones mayor/menor, etc.). Creo que lo toma de algún archivo AssemblyInfo.cs dentro del proyecto. – Andrei

0

¿Ha intentado utilizar la implementación de ClickOnce? Maneja toda la instalación y actualización de la aplicación. Al cambiar el estado de publicación de los archivos incluidos en la actualización, puede controlar si el archivo se sobrescribe con una actualización o permanece igual. Cuando se desinstala la aplicación, se eliminarán todos los archivos.

1

Esta no es una respuesta directa, pero ¿ha considerado utilizar un software de instalación de terceros? Utilizamos InnoSetup para distribuir una aplicación .Net, y nos resulta bastante fácil de usar y muy flexible. Sin duda podría manejar lo que estás describiendo.

+0

Esto no es lo que se preguntó pero, en mi humilde opinión, definitivamente es una buena respuesta, después de haber tenido que pasar por otra actualización del instalador de MSI (y el reinicio del servidor) para una instalación de software tonto. Estoy muy contento de que usemos InnoSetup para implementar (y actualizar) nuestro propio software. – shunty

0

El uso de un instalador de wix le permitirá hacer esta diferenciación. Este es un enfoque más práctico, pero funcionará.

0

También podría intentar agregar alguna acción de preinstalación personalizada, que copia la carpeta mencionada en una carpeta temporal y luego una acción de instalación posterior la copia en su lugar. Pero, por favor, primero considere las sugestiones anteriores, como usar un instalador más potente, o haga clic en Una vez.

2

El instalador tiene tres códigos GUID, Código de producto, Código de paquete y Código de actualización que puede utilizar para administrar estos escenarios: El Código de actualización es como un ID de aplicación y no debe cambiar entre versiones; PackageCode identifica una versión de su configuración y ProductCode identifica una versión de su software. Puede cambiar el Código de producto incrementando el valor de ProductVersion.

Windows usa el Código de producto para ver si la aplicación ya está instalada en un sistema. Si reinstala utilizando un instalador con el mismo Código de producto y PackageCode, obtiene una opción Reparar/Desinstalar.

+0

Gracias Rik, pero ¿cómo puedo acceder al Código de producto o PackageCode de una versión anterior, etc.? – Andrei

+0

Hay una herramienta llamada Orca, que es parte del SDK de Windows (creo), que es un editor de msi de bajo nivel. Debería poder inspeccionar un paquete MSI anterior para obtener los detalles. – Rikalous

+0

¿Cómo usaré esa información en el código que quiero decir? – Andrei

Cuestiones relacionadas