如何在安装期间用WIX替换特定的XML节点值

时间:2016-05-18 14:56:11

标签: xml wix

我正在使用WIX工具集为服务创建安装包。安装包正在用于简单的xml替换,但是我无法替换具有“相同”路径的多个节点的值。示例xml config:

<service name="service1">
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:1234/service1" />
      </baseAddresses>
    </host>
</service>
<service name="service2">
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:1234/service2/" />
      </baseAddresses>
    </host>
</service>

在安装期间,是否有一种简单的方法可以在使用WIX的所有节点中替换“1234”(1234在xml文件中是唯一的)?如果是这样,怎么样?

如果没有,我如何定位特定的服务节点?我的猜测是ElementPath?我有一个包含正确值的属性[newPortValue]。

<Component Id="xmlReplacerForService2" Guid="...">
    <util:XmlFile
    Id="xmlReplacerForService2"
    Action="setValue"
    File="[TESTFILEPRODUCTDIR]service.exe.config"
    SelectionLanguage="XPath"
    Permanent="yes"
    ElementPath="/service?WhatToAdd?"
    Name="baseAddress"
    Value="net.tcp://localhost:[newPortValue]/service2" />
</Component>

这可能吗?

1 个答案:

答案 0 :(得分:0)

请您试试下面的代码,看看是否有效? (我现在无法对此进行测试,这就是原因。)每个服务条目都必须有多个util:XmlFile元素。

<util:XmlFile
        Id="xmlReplacerForService2"
        Action="setValue"
        File="[TESTFILEPRODUCTDIR]service.exe.config"
        SelectionLanguage="XPath"
        Permanent="yes"
        ElementPath="/service[\[]@name='service1'[\]]/host/baseAddresses/add"
        Name="baseAddress"
        Value="net.tcp://localhost:[newPortValue]/service2" />