TL; DR: зачем мне нужен пустой элемент <CreateFolder/>
в этом условном компоненте, чтобы заставить его работать?
Я собираю простой установщик на основе WiX для собственного приложения. Этот установщик должен развернуть стандартный файл конфигурации (обычный файл .NET .config
), а затем настроить его с помощью свойств, переданных в msiexec
в командной строке.
Одна из настроек - создать конкретную настройку приложения, только если определено свойство RUNTIME. Здесь компонент WiX для этого:
<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>
Это работает так, как я хочу - если RUNTIME указан в командной строке для msiexec
, создается новый элемент; если нет, ничего не происходит.
Почему у меня должен быть пустой <CreateFolder/>
внутри этого компонента?
Пока я пытался получить эту работу, я обнаружил "" Заявление о состоянии Wix", в котором показан рабочий компонент, но не объясните, почему <CreateFolder/>
необходимо.
Удаление <CreateFolder/>
дает мне эту ошибку:
ICE18: KeyPath для компонента: "C.Rbnz.Fsis.CollectionPeriodService.exe.config.runtime" - это каталог: "INSTALLDIR". Параметр Directory/Component должен быть указан в таблице CreateFolders.
который, я уверен, достаточно информативен, когда вы знаете, что это значит.