WIX util:xmlfile File name is Source attribute

耗尽温柔 提交于 2019-12-23 10:41:12

问题


I am moving from a Wise Installer to WIX and am using the util:xmlfile to update a configuration xml file.

This works.

<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>

This does not work.

<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>

When the .msi executes with the first component, everything is fine. In the second version, an error is returned "Error 25531. Failed to open XML file..."

As far as I can tell the only difference is the hyphen in the file name.

Any suggestions as to what the difference might be?


回答1:


Try using the component's id instead of hard-coding the name

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

instead of

[INSTALLDIR]prod-config.xml



回答2:


The value for the File attribute for util:XmlFile tag should refer to the Id attribute for the File tag.

In your case this would be

<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>

In your example since you use the same identifier for both the Component tag and the File tag it doesn't matter. But in general you need to use the Id for the File tag.

To clarify, if your example used configComponent and configFile respectively for Component and File identifiers. It would look like the following:

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


来源:https://stackoverflow.com/questions/19796877/wix-utilxmlfile-file-name-is-source-attribute

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!