gpt4 book ai didi

wix - 为什么我的 WiX 安装程序需要一个空的 CreateFolder 来有条件地更新 Xml 文件?

转载 作者:行者123 更新时间:2023-12-04 12:54:12 25 4
gpt4 key购买 nike

TL;博士 : 为什么我需要一个空的<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: KeyPath for Component: 'C.Rbnz.Fsis.CollectionPeriodService.exe.config.runtime' is Directory: 'INSTALLDIR'. The Directory/Component pair must be listed in the CreateFolders table.



我敢肯定,一旦您知道它的含义,这将非常有用。

最佳答案

每个组件都有一个关键路径;最常见的是文件。您的组件没有文件或其他关键路径,因此 WiX 为其提供了默认目录。然后 Windows Installer 出现并说具有目录键路径的组件必须确保目录被创建,即使其他东西会这样做。这是一个很容易解决的愚蠢规则。

关于wix - 为什么我的 WiX 安装程序需要一个空的 CreateFolder 来有条件地更新 Xml 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12241056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com