我正在从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文件...”
据我所知,唯一的区别是文件名中的连字符。
有关差异的建议吗?
答案 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。
为了澄清,如果您的示例分别对configComponent
和configFile
标识符使用了Component
和File
。它看起来如下:
<Component Id="configComponent" Guid="*">
<File Id="configFile" Source="..\Source\Desktop\prod-config.xml" />
<util:XmlFile
Id="_PORT_" File="[#configFile]"
[snip]
/>
</File>
</Component>