4

我正在使用 InstallShield 2012 构建 Web 服务安装,我需要根据用户输入修改我的应用程序的 Web.config 文件。我在 DestinationFolder 对话框之后介绍了 PromptServerAndDatabase 对话框。我还在 InstallShield 的 XML 文件更改视图中设置了 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 中的结构:

XML 结构

此外,这里的“高级”选项卡对于所有三个节点几乎都是相同的。与 Database Name 关联的两个节点使用相同的属性,而 Server Name 的节点使用属性 [SERVER_NAME](未显示): 高级选项卡

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

我对此做了一些额外的研究,我发现这个网站总体上很有帮助,但没有为我解决这个问题:

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

也许答案就在那里,我只是想念它,IDK。

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

4

1 回答 1

3

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

这是一个视觉效果: 在此处输入图像描述

于 2013-05-08T13:43:30.097 回答