2013-05-07 188 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