c# - 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# - .net CORE API 用于翻译第三方 api 的 OData 响应以及下一页链接
- c# - DataGrid 行详细信息中的嵌套 Datagrid
- scala - 如何仅找出数据在scala中具有特定值的那些列名
- arrays - 重新格式化谷歌表中的大量数据
- svg - 无需图形工具包即可生成图像
- c++11 - 模板错误的演员表对象
- apache-spark - 将特定列下的行重命名为通用名称 - pyspark
- azure-devops - Azure DevOps Armtemplate Yaml 通过变量组禁用/启用作业
- c - 为什么我无法检测到我的文件在 C 中是空的还是不在?
- python - Tkinter GIF 动画步履蹒跚并且像素化