2010-01-15 17 views
13

Tengo un proyecto de instalación VS2008, que crea un setup.msi que instala una aplicación WinForms (C#).Proyecto de instalación VS2008: Desinstalar el MSI anterior

Cada vez que actualizo el número de versión, los usuarios primero tienen que desinstalar la versión anterior para poder instalar la nueva. De lo contrario, aparece el temido mensaje "Otra versión de este producto ya está instalada".

Esto es lo que estoy haciendo ya cuando construyo una nueva versión del instalador:

  • Conjunto RemovePreviousVersions = true y DetectNewerInstalledVersion = true
  • Incremento AssemblyVersion (de la exe que se está implementando)
  • Incremento Versión (del proyecto de configuración)
  • generar una nueva CódigoProducto (que se requiere para VS, cuando se cambia la versión)
  • Deja UpgradeCode sin cambios

Y sin embargo, todavía se niega a desinstalar la versión anterior. Entonces, ¿qué me he perdido? ¿O qué estoy haciendo mal?

Gracias!

+0

¿Está ejecutando directamente el archivo Setup.exe o YourApp.msi? – cmw

+0

Me doy cuenta de que no ofrece la flexibilidad total de un .msi, pero ¿la implementación de ClickOnce es una opción? Se actualizará automáticamente sin eliminación e incluso permitirá a los usuarios retroceder a la versión anterior, si es necesario (y si lo permite). Además, ¿ha probado diferentes permutaciones de esas opciones? ¿Qué tal si no incrementamos AssemblyVersion? – Jay

+0

Ejecutar setup.exe o msi produce el mismo resultado. Probablemente no he probado todas las combinaciones de estas opciones, pero debo haber probado la mayoría de ellas ahora!Definitivamente, he intentado dejar sin cambios AssemblyVersion: estoy bastante seguro de que AssemblyVersion no se supone que sea importante. –

Respuesta

19

semi-responder a mi propia pregunta, sólo para el beneficio de cualquiera que esté interesado:

En primer lugar, me encontré con una incredibly useful article sobre cómo funcionan las actualizaciones de MSI.

En segundo lugar, encontré InstEd, un editor MSI freeware muy bueno, que me mostró que no había nada obviamente malo en mi archivo MSI. (Sí, podría usar Orca en su lugar, si no me importa descargar todo el SDK de Windows para obtenerlo.)

En tercer lugar, y molestamente, el problema original parece haberse solucionado y no puedo reproducirlo Más. Si vuelve, y si lo arreglo de nuevo, ¡añadiré un comentario aquí!

fin, todo esto trajo una nueva - podría decirse que es peor - problema: el MSI ahora afirmó para actualizar la aplicación, pero en realidad no instalar nada! La solución a esto es como sigue:

  • AssemblyVersion no importa, pero AssemblyFileVersion absolutamente hace: es imprescindible incremento, si desea que los nuevos archivos que se instalarán. (Esto es un cambio en VS2008, en comparación con VS2005. Véase, por ejemplo, en los grupos this discussion Microsoft .)
  • Sin embargo, no puede AssemblyFileVersion AutoIncrement la forma AssemblyVersion lata. Al establecerlo en 1.9. * (O cualquiera) se producirá un error de . La solución, desde Stack Overflow esta vez, es configurar AssemblyVersion para autoincrementarse, y luego abrir AssemblyInfo.cs y eliminar el atributo AssemblyFileVersion en total. Esto forzará la versión del archivo para igualar la versión del ensamblaje .
+0

AssemblyVersion vs AssemblyFileVersion me ayuda mucho, especialmente para no colocar AssemblyFileVersion en los archivos de AssemblyInfo.cs! ¡Gran ayuda! – psulek

+0

De acuerdo con el punto final. Haga todo de acuerdo con la pregunta y asegúrese de eliminar AssemblyFileVersion en AssemblyInfo.cs – cmroanirgo

+0

Tengo el mismo problema y encuentro que esta solución funciona correctamente. Lamentablemente, porque almaceno mis datos de aplicación en Application.LocalUserAppDataPath; No puedo cambiar la versión del archivo; de lo contrario, esto apunta a una nueva carpeta \ AppData \ Local \ Company \ AppName \ V1.0.0.2 etc. y todos mis datos están en V1.0.0.0. Esto me obligaría a reconstruir todos los datos en la nueva carpeta siempre que se actualicen el ejecutable y el instalador. ¿Alguna sugerencia? –

4

No estoy 100% familiarizado con los proyectos de configuración de VS 2008 (yo uso Advanced Installer- ALTAMENTE lo recomiendo, incluso tienen una versión gratuita), pero me he encontrado con esto antes y no está documentado con mucha claridad.

Hay 4 partes para el número de versión, como bien sabe, estoy seguro: Major.Minor.Build.Revision. El instalador de Windows no verifica la REVISIÓN. Si todo lo que hace es incrementar la revisión, no funcionará. Debe aumentar al menos la construcción del valor ProductVersion.

Espero que ayude!

+0

Siempre estoy incrementando al menos la versión menor, así que no creo que sea eso. Gracias por el puntero al Instalador avanzado, aunque ... –

5

tenerlo instalar sobre la versión anterior:

  1. Resalte el proyecto de instalación.
  2. Presione la tecla F4 para ver las propiedades. (Click derecho es un cuadro de propiedades diferente.)
  3. Cambiar versión. Diga sí a la solicitud de cambio de código de producto.

Tenga en cuenta que, incluso si reconstruye la solución, no reconstruye el proyecto de instalación. Necesita reconstruir el proyecto de instalación como un paso separado.

En segundo lugar, no necesita aumentar AssemblyVersion cada vez. Establézcalo en algo como 2.1. * Y lo hará automáticamente.

+0

No estoy seguro si solo soy yo, pero parece que funciona siempre en VS2010. – JBrooks

0

El servicio de instalación toma decisiones basadas en los contenidos de la tabla de actualización, de modo que allí es donde me vería. ¿La tabla tiene una entrada para su código de actualización, la versión del producto de la versión instalada actualmente cae dentro del rango de versiones especificadas para actualizaciones, los atributos se ven bien (por ejemplo, no está establecido el atributo msidbUpgradeAttributesOnlyDetect), y así sucesivamente? .

MSDN describe todo aquí - http://msdn.microsoft.com/en-us/library/aa372379%28VS.85%29.aspx

0

No se olvide para incrementar el AssemblyFileVersion! Si no especifica la versión del archivo de ensamblaje, entonces el compilador asume que es lo mismo que assemblyVersion. Sin embargo, si se especifica assemblyFileVersion, entonces debe incrementarse.

0

Vine aquí para obtener ayuda para el mismo problema. Después de leer el enlace incredible useful article supongo que mi problema era que había instalado una versión anterior con la opción "Just me" y el nuevo instalador tenía la propiedad InstallAllUsers seleccionada (en las propiedades del proyecto de Visual Studio). Entonces, después de desinstalar la instalación previa desde el panel de control, la actualización ahora funciona. Tal vez esto ayude a alguien.

Cuestiones relacionadas