TL;DR : Warum brauche ich ein leer <CreateFolder/>
Element in dieser bedingten Komponente, damit sie funktioniert?
Ich bin dabei, ein einfaches WiX-basiertes Installationsprogramm für eine interne Anwendung zu erstellen. Dieser Installer muss eine Standard-Konfigurationsdatei (eine normale .NET .config
Datei) und passen Sie sie dann mit Hilfe von Eigenschaften an, die an msiexec
in der Befehlszeile.
Eine der Anpassungen besteht darin, eine bestimmte Anwendungseinstellung nur dann zu erstellen, wenn die Eigenschaft RUNTIME definiert wurde. Hier ist die WiX-Komponente dafür:
<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>
Das funktioniert genau so, wie ich es mir wünsche - wenn RUNTIME auf der Befehlszeile angegeben wird für msiexec
wird das neue Element erstellt, andernfalls geschieht nichts.
Warum muss ich die leere <CreateFolder/>
innerhalb dieser Komponente?
Während ich versuchte, dies zum Laufen zu bringen, fand ich " Wix Bedingungserklärung ", das ein funktionierendes Bauteil zeigt, aber nicht erklärt, warum <CreateFolder/>
notwendig ist.
Entfernen von <CreateFolder/>
gibt mir diese Fehlermeldung:
ICE18: KeyPath für Komponente: 'C.Rbnz.Fsis.CollectionPeriodService.exe.config.runtime' ist Verzeichnis: 'INSTALLDIR'. Das Verzeichnis/Komponentenpaar muss in der Tabelle CreateFolders aufgeführt sein.
was sicher recht informativ ist, wenn man weiß, was es bedeutet.