tag son que metaetiqueta los encabezado código codigos codigo code agrega wix windows-installer msiexec wix-extension

wix - son - tag del encabezado



¿Por qué mi instalador de WiX necesita un CreateFolder vacío para actualizar condicionalmente un archivo Xml? (2)

Cada componente tiene un camino clave; El más común es un archivo. Su componente no tiene un archivo u otra ruta de acceso clave, por lo que WiX le da el valor predeterminado de un directorio. Windows Installer aparece y dice que los componentes con rutas de acceso a la clave del directorio deben garantizar que se crea el directorio, incluso si algo más lo hace. Es una regla tonta con una solución fácil.

TL; DR : ¿Por qué necesito un elemento <CreateFolder/> vacío en este componente condicional para que funcione?

Estoy armando un simple instalador basado en WiX para una aplicación interna. Este instalador necesita implementar un archivo de configuración estándar (un archivo .config .NET normal) y luego personalizarlo con las propiedades pasadas a msiexec en la línea de comandos.

Una de las personalizaciones es crear una configuración de aplicación específica solo si la propiedad RUNTIME se ha definido. Aquí está el componente de WiX para eso:

<Component Id="C.Rbnz.Fsis.CollectionPeriodService.exe.config.runtime" Guid="*"> <Condition> <![CDATA[RUNTIME]]> </Condition> <CreateFolder/> <util:XmlFile Id="X.Runtime.1" Action="createElement" ElementPath="/configuration/appSettings" File="[#F.Rbnz.Fsis.CollectionPeriodService.exe.config]" Name="add" Sequence="2"/> <util:XmlFile Id="X.Runtime.2" File="[#F.Rbnz.Fsis.CollectionPeriodService.exe.config]" ElementPath="/configuration/appSettings/add[/[]not(@key)[/]]" Action="setValue" Name="key" Value="RunTime" Sequence="3"/> <util:XmlFile Id="X.Runtime.3" File="[#F.Rbnz.Fsis.CollectionPeriodService.exe.config]" ElementPath="/configuration/appSettings/add[/[]@key=''RunTime''[/]]" Action="setValue" Name="value" Value="[RUNTIME]" Sequence="4"/> </Component>

Esto funciona como deseo: si RUNTIME se especifica en la línea de comandos de msiexec , se crea el nuevo elemento; Si no, no pasa nada.

¿Por qué tengo que tener el <CreateFolder/> vacío dentro de este componente?

Mientras intentaba que esto funcionara, encontré " Wix Condition Statement ", que mostraba un componente funcional, pero no explica por qué <CreateFolder/> es necesario.

Eliminar <CreateFolder/> me da este error:

ICE18: KeyPath para Componente: ''C.Rbnz.Fsis.CollectionPeriodService.exe.config.runtime'' es Directorio: ''INSTALLDIR''. El par de Directorio / Componente debe aparecer en la tabla Crear Carpetas.

que es, estoy seguro, bastante informativo una vez que sabes lo que significa.


Puede usar el parámetro KeyPath = "yes" en su etiqueta de componente. Solo si ''INSTALLDIR'' es la ruta correcta para este componente.