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>
如果在msiexec
的命令行中指定了RUNTIME,则会创建新元素,否则不会。
我为什么要在此组件中放置空的<CreateFolder/>
元素?
在我试图让这个工作时,我发现了"Wix Condition Statement",它展示了一个有效的组件,但没有说明为什么需要<CreateFolder/>
。
移除<CreateFolder/>
会导致ICE18错误:
ICE18:组件“C.Rbnz.Fsis.CollectionPeriodService.exe.config.runtime”的关键路径是目录:“INSTALLDIR”。目录/组件对必须在CreateFolders表中列出。
一旦你知道这意味着什么,这就很有信息量了。
<CreateFolder/>
是必需的,以确保它正常工作。但是这个目录是哪个,位于哪里?这样做安全吗?这是否会在安装过程中在目标机器上创建空的(垃圾)文件夹?有没有更简洁的方法来完成这个任务? - Bevan