我正在使用InstallShield 2012构建Web服务安装,我需要根据用户输入修改我的应用程序的Web.config文件。我在DestinationFolder对话框之后引入了PromptServerAndDatabase对话框。我还在InstallShield的XML File Changes视图中设置了Web.config文件。这是我的基本web.config文件结构:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<configSections>
...
</configSections>
<appSettings>
<add key="DatabaseServer" value="sql08r2">sql08r2</add>
<add key="DatabaseName" value="UserDatabaseName">UserDatabaseName</add>
</appSettings>
...
</configuration>
此时我可以成功更改节点的文字值,但我无法更改节点的属性。
以下是“XML文件更改”视图中InstallShield中的结构:
此外,这里是高级选项卡,对于所有三个节点几乎完全相同。与Database Name关联的两个节点使用相同的属性,而Server Name的节点使用属性[SERVER_NAME](未显示):
运行安装程序后,Web.config文件已成功更新。 DatabaseName和ServerName节点的值已更新。但是,DatabaseName节点中“value”属性的值不是,尽管它应该反映与节点实际值相同的文本。一旦我完善了这个,我将需要为ServerName节点复制它,但为了简单起见,我把它留了下来。
我对此做了一些额外的研究,我发现这个网站总体上非常有用,但没有为我解决这个问题:
http://helpnet.installshield.com/installshield16helplib/XML-XPath.htm
也许答案就在那里,我只是错过了它,IDK。
感谢您提供的任何帮助。
答案 0 :(得分:3)
好的,我的问题是我对General选项卡和添加的属性有一个基本的误解。 “常规”选项卡上的属性实际上是XML节点的属性,该表中每个条目的值列是该属性将设置的值。因此,通过将该值更改为我正在更改的属性,它解决了我的问题。我按原样离开了“高级”选项卡,因为我在那里的选项正确地更改了元素内容的值。最后,我更改了XPath查询以删除value属性,因为正在安装的web.config文件将来可能会更改此值。由于appSettings节点中只有一个添加节点的键值为DatabaseName或ServerName,因此我只需要搜索key =“”的XPath。
这是一个视觉: