TL;DR: 为什么我需要一个empty <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>
这正如我想要的那样工作 - 如果在命令行上指定了 RUNTIMEmsiexec
,新元素被创建;如果没有,则什么也不会发生。
为什么我必须有空<CreateFolder/>
在这个组件内?
当我试图让它工作时,我发现“Wix 条件声明 http://madtechnology.wordpress.com/2007/05/04/wix-condition-statement/”,显示了一个工作组件,但没有解释原因<CreateFolder/>
是必要的。
去除<CreateFolder/>
给我这个错误:
ICE18:组件的 KeyPath:“C.Rbnz.Fsis.CollectionPeriodService.exe.config.runtime”是目录:“INSTALLDIR”。目录/组件对必须列在 CreateFolders 表中。
我敢肯定,一旦你知道它的含义,它就会提供相当多的信息。
每个组件都有一个关键路径;最常见的是文件。您的组件没有文件或其他关键路径,因此 WiX 为其提供默认目录。然后,Windows Installer 出现并表示具有目录键路径的组件必须确保创建该目录,即使其他东西会这样做。这是一个愚蠢的规则,但很容易解决。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)