WIX util:xmlfile文件名是Source属性

时间:2013-11-05 19:10:42

标签: xml wix

我正在从Wise Installer转移到WIX并使用util:xmlfile来更新配置xml文件。

这很有效。

<Component Id="config" Guid="*">
  <File Id="config" Source="..\Source\Desktop\prodconfig.xml" KeyPath="yes" Vital="yes" />
    <util:XmlFile 
      Id="_PORT_" File="[INSTALLDIR]prodconfig.xml"  
      Action="setValue" 
      Name="Port" Value="[PORT]" 
      ElementPath="//Configuration/CommConnectionPools/CommConnectionPool" 
      Sequence='1' />
  </File>
</Component>

这不起作用。

<Component Id="config" Guid="*">
  <File Id="config" Source="..\Source\Desktop\prod-config.xml" KeyPath="yes" Vital="yes" />
    <util:XmlFile 
      Id="_PORT_" File="[INSTALLDIR]prod-config.xml"  
      Action="setValue" 
      Name="Port" Value="[PORT]" 
      ElementPath="//Configuration/CommConnectionPools/CommConnectionPool" 
      Sequence='1' />
  </File>
</Component>

当.msi用第一个组件执行时,一切都很好。在第二个版本中,返回错误“错误25531.无法打开XML文件...”

据我所知,唯一的区别是文件名中的连字符。

有关差异的建议吗?

2 个答案:

答案 0 :(得分:9)

尝试使用组件的id而不是硬编码名称

[#config] //which will refer to the File Id

而不是

[INSTALLDIR]prod-config.xml

答案 1 :(得分:0)

File标记的util:XmlFile属性的值应引用Id标记的File属性。

在你的情况下,这将是

<Component Id="config" Guid="*">
  <File Id="config" Source="..\Source\Desktop\prod-config.xml" KeyPath="yes" Vital="yes" />
    <util:XmlFile 
      Id="_PORT_" File="[#config]"  
      Action="setValue" 
      Name="Port" Value="[PORT]" 
      ElementPath="//Configuration/CommConnectionPools/CommConnectionPool" 
      Sequence='1' />
  </File>
</Component>

在您的示例中,因为您对Component标记和File标记都使用相同的标识符,所以它并不重要。但一般来说,您需要使用File标记的ID。

为了澄清,如果您的示例分别对configComponentconfigFile标识符使用了ComponentFile。它看起来如下:

<Component Id="configComponent" Guid="*">
  <File Id="configFile" Source="..\Source\Desktop\prod-config.xml" />
    <util:XmlFile 
      Id="_PORT_" File="[#configFile]"  
[snip]
     />
  </File>
</Component>