tag modificar metaetiqueta etiquetas encabezado ejemplos editar como codigos agregar installer wix windows-installer configuration-files

installer - modificar - WiX sobrescribe los archivos de configuración durante la configuración. ¿Cómo puedo evitar esto?



modificar head wix (5)

Estoy usando WiX para crear un instalador de Windows. Desafortunadamente, mi instalador sobrescribe un archivo de configuración en cada actualización. Lo que realmente quiero es que el instalador solo cree el archivo si no lo encuentra.

Gracias y saludos, forki


Esto realmente es un error de aplicación, no un problema de configuración.

No debe estar "instalando" datos que luego el usuario puede editar, Windows Installer registra el tamaño, la fecha de modificación y el valor hash de los archivos instalados. De esa manera, si luego se descubre que el archivo está "dañado", se puede reparar.

Instalamos un archivo de configuración predeterminado que se copia a la configuración del usuario cuando no se encuentra ninguno, de esa manera, Windows Installer ni siquiera conoce la configuración editable del usuario y, por lo tanto, no hace ningún reemplazo.


Estoy seguro de que a alguien se le ocurrirá una respuesta adecuada, pero como respaldo:

Podría hacer que el instalador cree un archivo de configuración predeterminado y luego haga que su aplicación copie el archivo predeterminado al archivo de configuración normal, si el archivo de configuración normal no está presente. Esto también proporciona una manera fácil de restablecer la aplicación a los valores predeterminados de fábrica (solo elimine el archivo de configuración).


Puede cambiar el comportamiento predeterminado con la propiedad REINSTALLMODE . El valor predeterminado es "Reinstalar si falta el archivo o si es una versión anterior", lo que es lógicamente correcto, como para mí. Pero puede experimentar con otros valores para encontrar el comportamiento que necesita.

Espero que esto ayude.


Component/@NeverOverwrite="yes" hará esto. Solo recuerde establecer File/@KeyPath="yes" en uno o más de los archivos para que pueda detectar si ya está presente.

Si está usando heat.exe para cosechar su lista de archivos automáticamente, puede usar la siguiente hoja de estilo XSLT para establecer este atributo en cada componente que contiene un archivo de configuración (y configurar cada elemento del archivo de configuración como una ruta de acceso clave).

<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:wix="http://schemas.microsoft.com/wix/2006/wi" exclude-result-prefixes="msxsl wix"> <xsl:output method="xml" indent="yes" /> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="//*[local-name()=''Component'']"> <wix:Component Id="{@Id}" Directory="{@Directory}" Guid="{@Guid}"> <xsl:if test="contains(*[local-name()=''File'']/@Source, ''.config'')"> <xsl:attribute name="NeverOverwrite">yes</xsl:attribute> </xsl:if> <xsl:apply-templates select="@* | node()"/> </wix:Component> </xsl:template> <xsl:template match="@KeyPath"> <xsl:choose> <xsl:when test="contains(parent::node()/@Source, ''.config'')"> <xsl:attribute name="KeyPath"> <xsl:value-of select="''yes''"/> </xsl:attribute> </xsl:when> </xsl:choose> </xsl:template> </xsl:stylesheet>

(Nota: el manejo del espacio de nombres XML probablemente se puede limpiar, pero funciona.)


El Component @NeverOverwrite="yes" podría ser la solución a este problema.

De la documentación de ayuda de WiX:

Si este atributo se establece en ''sí'', el instalador no instala ni reinstala el componente si ya existe un archivo de ruta de acceso clave o una entrada de registro de ruta de acceso clave para el componente. La aplicación se registra como cliente del componente. Utilice este indicador solo para los componentes que están siendo registrados por la tabla de Registro. No utilice este indicador para los componentes registrados por las tablas AppId, Class, Extension, ProgId, MIME y Verb.

Documentación del elemento componente