6

我正在从 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 文件...”

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

关于可能有什么区别的任何建议?

4

2 回答 2

9

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

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

代替

[INSTALLDIR]prod-config.xml
于 2014-02-16T01:40:19.993 回答
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>
于 2018-03-21T03:15:11.387 回答