我将一个简单的基于WiX的安装程序用于内部应用程序。此安装程序需要部署标准配置文件(正常的.NET .config文件),然后使用在命令行上传递给msiexec的属性来自定义它。
其中一个自定义是仅在已定义RUNTIME属性时创建特定应用程序设置。这里是WiX组件:
<Component Id="C.Rbnz.Fsis.CollectionPeriodService.exe.config.runtime" Guid="(71E6D273-427D-41FD-865A-FB55E9F0988C)"> <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 />是必要的。
ICE18: KeyPath for Component: ‘C.Rbnz.Fsis.CollectionPeriodService.exe.config.runtime’ is Directory: ‘INSTALLDIR’. The Directory/Component pair must be listed in the CreateFolders table.
这是,我敢肯定,一旦你知道这是什么意思,相当信息。