首页 > 解决方案 > Wix 安装程序实用程序:XmlFile

问题描述

我正在对安装程序进行一些更改。XML 文件需要在安装时更改一些值,这些值由 Wix 处理。

配置文件有多个同名节点。下面的例子。

<service>

<id>nginx</id>
<name>nginx</name>
<description>nginx</description>
<executable>D:\tools\nginx-1.13.2\nginx.exe</executable>
<logpath>D:\tools\nginx-1.13.2\logs</logpath>
<logmode>roll</logmode>
<depend></depend>
<startargument>-p</startargument>
<startargument>D:\tools\nginx-1.13.2</startargument>
<stopexecutable>D:\tools\nginx-1.13.2\nginx.exe</stopexecutable>
<stopargument>-p</stopargument>
<stopargument>D:\tools\nginx-1.13.2</stopargument>
<stopargument>-s</stopargument>
<stopargument>stop</stopargument></service>

根据我对 Xpath 的理解,我可以使用 /service/startargument[2] 来获取第二个同名节点。这个下面的wix命令也是我试过的。

<util:XmlFile Id="NginxStartArgs" Action="setValue" ElementPath="/service/startargument[2]" File="[!nginxservice.xml]" Value="[NginxDir]" />

Wix 文档状态

要修改的元素的 XPath。请注意,这是一个格式化字段,因此必须对 XPath 中的方括号进行转义。此外,XPath 允许使用反斜杠来转义字符,因此如果您打算包含文字反斜杠,则还必须通过在此属性中将它们加倍来转义它们。该字符串首先由 MSI 格式化,结果作为 XPath 使用。

我也试过

<util:XmlFile Id="NginxStartArgs" Action="setValue" ElementPath="/service/startargument[\[]2[\]]" File="[!nginxservice.xml]" Value="[NginxDir]" />

但这将尝试找到一个名为 /service/ startargument[2]的节点,当然该节点不存在。

任何有 Wix 和 XML 经验的人都可以帮忙吗?

标签: c#xmlwixwix3.5

解决方案


推荐阅读