2009-06-22 16 views
5

Tengo una aplicación de Windows Forms con un instalador (.msi) ya creado con Visual Studio. Ahora estoy creando un nuevo instalador para la versión 2.0 con la propiedad RemovePreviousVersions establecida en true.¿Podemos indicarle a Visual Studio Setup que mantenga los archivos existentes para volver a instalarlos?

Ahora, cuando instalo 2.0 sobre 1.0, elimina 1.0 e instala 2.0 por completo.

¿Hay alguna manera de decirle al instalador si encuentra algunos archivos ya instalados (como los archivos .xml utilizados para los datos) y no los anula?

Estoy tratando de tener mi instalador 2.0 sirven los 2 propósitos:

  • Instalar desde cero para los nuevos usuarios
  • usuarios existentes se mejora, pero no pierde sus personalizaciones

Respuesta

2

Cuando era en una situación similar, lo que hice fue:

Los archivos que fueron personalizados por cada usuario y NO deberían ser tocados por el instalador NO se incluyeron en e MSI (NO en el proyecto de instalación de Visual Studio). Cuando la aplicación se ejecutó por primera vez, generé los archivos XML a través del código.

Los archivos que eran estáticos (por ejemplo, los datos que se utilizaron para rellenar listas desplegables) los incluí en el MSI y puedo actualizarlos construyendo un nuevo MSI con Visual Studio.

Básicamente no incluye archivos personalizables en su proyecto de MSI. Créelos en código para nuevos usuarios.

Nunca intenté decirle al MSI que no actualice ciertos archivos que están incluidos en el archivo MSI. La solución que se me ocurrió fue perfecta para mí. No sé si se puede hacer.

Espero que esto ayude.

13

El proyecto de implementación en VS no sobrescribe los archivos. Lo que ocurre es que, como tiene RemovePreviousVersions establecido en true, cuando cambia la versión de su archivo de programa y el GUID de ProductCode del proyecto de configuración, primero desinstala la versión anterior y luego realiza una instalación limpia de la nueva versión.

Para asegurarse de que algunos archivos no se sobreescriban, generalmente los excluyo de los archivos de Contenido o de Salida principal (donde se encuentren) y luego los agrego por separado al proyecto de configuración. Al hacer esto, puede establecer propiedades individuales para esos archivos. La propiedad que está buscando se llama Permanent "que si se establece en verdadero nunca desinstalará el archivo en cuestión, y por lo tanto nunca lo sobreescribirá con una nueva versión. El único inconveniente con esto es que cuando desinstala el producto, los archivos permanentes no conseguirá removidos de sus lugares de destino, pero en mi caso (por lo general los archivos locales DB), que es una buena cosa;!.)

Saludos

[editar] lo anterior es cierto para VS 2008 SP1 Haven' Lo intenté en otras versiones, así que con suerte está usando la misma versión VS o funciona para la versión que usa.

[edit2] Ah, también podría usar la propiedad "Condición" para lograr algo similar Arkansas. Si lo hace, asegúrese de que "Transitivo" esté configurado en True para que la Condición siempre se evalúe. No lo he intentado con las Condiciones, pero esa es otra opción que podrías mirar. Aparte de estos 2, creo que es más o menos para los proyectos de implementación de VS.

+0

¡Genial, gracias! Esto debe marcarse como respuesta. –

+1

Las reglas para el reemplazo de archivos son [aquí] (http://msdn.microsoft.com/en-us/library/aa370531(v=VS.85).aspx). – CyberMonk

+0

Usando VS2010 SP1. No funciona para mí ... ¡El archivo se reemplaza aunque Permanet esté configurado como verdadero! Se reemplaza cuando la fecha/hora del archivo en el disco es anterior a la fecha de creación del paquete. En VS2010 no SP1, se reemplazó cuando la fecha del archivo en el disco era más antigua que la fecha del archivo utilizado para crear el paquete. Configurar la hora de fecha del archivo fuente al 01/01/2001 me resolvió un montón de problemas, pero ya no funciona. –

Cuestiones relacionadas