2013-05-07 178 views
4

我正在使用InstallShield 2012构建Web服务安装,并且需要根据用户输入修改我的应用程序的Web.config文件。我在DestinationFolder对话框后面引入了PromptServerAndDatabase对话框。我还在InstallShield的XML File Changes视图中设置了Web.config文件。这是我的基本web.config文件结构:InstallShield XML文件更改 - 安装时更改节点属性

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

这时我可以成功地更改节点的字面意义,但我不能改变一个节点的属性。

这里的内的InstallShield结构的XML文件的更改查看:

XML Structure

而且,这里的高级选项卡是所有三个节点几乎相同。与数据库名称相关联的两个节点都使用相同的属性,而对于服务器名称节点使用属性[SERVER_NAME](未显示): Advanced Tab

运行安装程序的Web.config文件更新成功后。 DatabaseName和ServerName节点的值将被更新。但是,DatabaseName节点中“value”属性的值不是,尽管它应该反映与节点实际值相同的文本。一旦我完善了这一点,我将需要将它复制到ServerName节点,但为了简单起见,我将其留下了。

我已经做了一些额外的研究这一点,我发现这个网站它是非常有益的整体,但并没有解决这个问题对我来说:

http://helpnet.installshield.com/installshield16helplib/XML-XPath.htm

也许答案是存在的,我只是想念它,IDK。

感谢您对此提供的任何帮助。

回答

3

好的,所以我的问题是我有一个常规选项卡和属性被添加到那里的基本误解。 “常规”选项卡上的属性实际上是XML节点的属性,并且该表中每个条目的值列都是属性将设置为的值。所以通过改变这个价值到我改变的财产,它解决了我的问题。我现在离开了高级选项卡,因为我的选项正确地更改了元素内容的值。最后,我更改了XPath查询以删除value属性,因为将来安装的web.config文件可能会更改此值。由于在appSettings节点中只有一个添加节点,其键值为DatabaseName或ServerName,所以我只需要搜索key =“”的XPath。

下面是一个视觉效果: enter image description here