49 Stimmen

Warum benötigt mein WiX-Installationsprogramm einen leeren CreateFolder, um eine Xml-Datei bedingt zu aktualisieren?

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X