Tengo un Proyecto de Implementación para mi VS2008 aplicación de C#. Al instalar una nueva versión de mi aplicación que desea asegurarse de que los archivos se han actualizado con los archivos contenidos en el instalador.

Quiero que mi instalador para eliminar automáticamente cualquier versión anterior de la aplicación instalada. Para hacer que me siga este procedimiento (también descrito aquí):

  1. Conjunto RemovePreviousVersions a True
  2. Conjunto DetectNewerInstalledVersion a
    Cierto
  3. Incremento de la Versión de la
    instalador de
  4. Elija Sí para cambiar el ProductCode

Para las asambleas que asegúrese de que el AssemblyVersion se establece a una versión superior:

[assembly: AssemblyVersion("1.0.*")]

Todo funciona según lo previsto, excepto para mis archivos de configuración (archivos xml). Ya que no puedo encontrar una manera de «versión» estos archivos no puedo asegúrese de que los archivos se actualizan si se han modificado en el equipo de destino.

Es hay alguna forma de hacer esto y cómo?

ACTUALIZACIÓN: he tratado de que el enfoque/solución/solución encontrada aquí

  1. Incluir el archivo directamente en una
    proyecto con el siguiente
    propiedades: «Build Action -> Contenido
    archivo» y «Copiar en el Directorio de Salida
    -> Copiar siempre»
  2. A continuación, añadir a la implementación de
    proyecto a través del Proyecto
    Salida->Base de datos->Contenido de los Archivos de

Por desgracia no hace ninguna diferencia. El comportamiento es exactamente el mismo.

  • Usted dice que «no se puede encontrar una manera de «versión» de estos archivos», pero son usted seguro de que no se sobrescriban correctamente en la (re)instalación?
  • Sí, estoy seguro de que. Puedo ver que el contenido de los archivos no se actualiza y la Fecha de Modificación de los archivos xml que nunca cambia. Cuando se realiza una reparación mediante el comando msiexec con la /fa cambiar los archivos están correctamente actualizados.

4 Comentarios

  1. 2

    Si usted está dispuesto a utilizar Orca (no puede ser de otra manera para hacer este método, pero es el único que yo sepa) usted puede ser capaz de establecer RemoveFile directivas.

    Ver aquí por lo general una luz-peso en el documento de MSDN — podría ser un punto de partida.
    http://msdn.microsoft.com/en-us/library/aa371201.aspx

    Alternativamente, usted siempre puede crear un simple arranque ejecutable que se llama simplemente «msiexec /i REINSTALLMODE=oums» (o cualquiera que sea el modificadores de línea de comandos son necesarios). Lo llaman setup.exe si te gusta…

    Mejor opción a largo plazo puede ser cambiar a InstallShield o similares — VS2010 incluye una versión ligera de ES y creo que se está moviendo lejos de vdproj proyectos.

  2. 3

    Añadir la siguiente propiedad a la tabla de propiedades de la MSI:
    Propiedad REINSTALLMODE con Valor amus

    Nota: Esto hará que todos los archivos en el archivo MSI (versionados y no versionados) para sobrescribir los archivos que están en el sistema.

    • ¿Cómo puedo agregar propiedades a la tabla de propiedades de la MSI? Es algo que puedo hacer en el post de construir caso de que el instalador?
    • Puedo hacer esto mediante InstallShield. Otra forma es utilizar ORCA para añadir la propiedad de la MSI después de que se construyó.
    • Esto casi nunca es seguro como se puede desencadenar reinstalación de sistema de archivos instalados por los módulos de combinación. Este pueden degradar el sistema de archivos en versiones anteriores de Windows o activar una protección de archivos de error en versiones más recientes de Windows. Considere el uso de emus en lugar de (reemplazar los archivos con la misma versión) más de la normal de omus (reemplazar los archivos con menor sólo en la versión).
    • Esto es MUY seguro en la mayoría de circunstancias, debido a que usted NO debe instalar los archivos de sistema de combinación de los módulos en la aplicación se instala. (msdn.microsoft.com/en-us/library/…). La instalación de la aplicación no debe instalar los archivos en la carpeta del sistema y las versiones actuales de los archivos de Microsoft debe ser instalado utilizando el adaptador de MSI o exe y NO mediante merege módulos. Un arranque puede ser creado que contiene la aplicación MSI y Microsoft instalar si es necesario.
  3. 1

    Has probado el enfoque/solución/solución encontrada aquí?

    1. Incluir el archivo directamente en una
      proyecto con el siguiente
      propiedades: «Build Action -> Contenido
      archivo» y «Copiar en el Directorio de Salida
      -> Copiar siempre»
    2. A continuación, añadir a la implementación de
      proyecto a través del Proyecto
      Salida->Base de datos->Contenido de los Archivos de
    • He probado tu sugerencia. Por desgracia, no hace ninguna diferencia. He actualizado a la pregunta. Gracias de todos modos.
  4. 0

    Yo puede ser incorrecta aquí, y por lo tanto me expongo a mí mismo a bajar votos, pero aquí va de todos modos!

    Creo que es a propósito de que los archivos de configuración no se sobrescribe automáticamente; el principio de no se que normalmente no se quiere que la aplicación de configuración sobrescribe cuando se instale la nueva versión del programa… al menos no sin numerosas advertencias y/o de las posibilidades para combinar configuración.

    Tener su configuración de la aplicación se sobrescribe con una versión actualizada de un programa puede hacer para una muy molesto el usuario final (en este caso, el sitio web de administración).


    Además, sé que a veces, el promotor puede ser la persona que realiza la implementación. En tal caso, este comportamiento no parece tan lógico que cuando se implementa un único sitio a un solo servidor, pero cuando los roles se dividen y/o tiene varios servidores con diferentes configuraciones, esto puede ser un protector de la vida.

    • Estoy de acuerdo en que se explica el razonamiento detrás de la conducta, pero el OP está buscando una solución 🙂 no estoy seguro de que no es una simple revisión a pesar de que
    • Sí; tengo un poco llevar conmigo mismo, y sorta se olvidó de mencionar, «yo no creo que sea fácil de arreglar, porque…» en primer lugar. Probablemente tendrá que tomar algunas acciones personalizadas de trabajo.
    • Hemos utilizado Acciones Personalizadas y están bastante potente, pero puede dejar abierto a todo tipo de problemas-por ejemplo, usted puede llamar a un archivo ejecutable, pero si el ejecutable ha sido eliminado en algún momento más tarde, el paquete no puede ser desinstalado! También son muy difíciles de depurar… YMMV
    • Soy consciente de la intención de comportamiento de los ficheros de configuración aunque yo creo que es más «limpio» que tienen preferencias del usuario en un archivo separado que no figuran en el proyecto. Necesito actualizar estos archivos xml para asegurarse de que cualquier nueva configuración (o cambiado la configuración predeterminada) se renueva.
    • El problema no se limita a «configuración» archivos, los archivos de datos: imágenes, otros recursos son las más afectadas. Es una verdadera vergüenza Microsoft no agregar un «Sobrescribir Siempre» de la propiedad.

Dejar respuesta

Please enter your comment!
Please enter your name here