2012-12-07 58 views
0

我正在開發的一個應用程序正在被各種客戶端使用。應用程序需要連接到數據庫,因此在app.config中定義了連接字符串。但每個客戶端都需要不同的連接字符串。處理應用程序更新時連接字符串的位置

客戶端在安裝產品時必須提供數據庫信息。隨着每個新版本他們需要提供這些信息。

我真正想要的是,某些設置(如connectionstring)存儲在不受新安裝影響的位置。處理這個問題的最好方法是什麼?

+0

使用註冊表是一個選項。 – Maarten

+0

我認爲這是更新已經安裝的應用程序的一般問題的錯誤方法。您的安裝程序應該能夠識別以前的安裝,並且不會覆蓋或刪除新版本中仍然需要的任何以前的數據 – Steve

+0

這正是我以前的想法。但是,當我將某些內容更改爲app.config時,無論如何,安裝程序都需要更新app.config。 –

回答

0

你有沒有考慮爲每個客戶創建一個轉換(http://wix.tramontana.co.hu/tutorial/transforms)?將連接字符串粘貼到一個屬性中,並使用變換在客戶端上進行更新,它比更新安裝程序以使用它們在安裝期間輸入的內容(以及可能出現的較少錯誤)要快得多/更容易。簡單的跑步:

installer.msi轉換= client.mst

缺點是,他們那麼必須確保他們使用,當他們運行安裝程序的轉換,現在知道你如何包裝這些東西或者啓動它們等等。如果你只是給了任何老湯姆,迪克或哈利的東西,這可能不是最好的解決方案,如果是你或者你認爲安裝它的人,那麼它可能是一個簡單的解決方案。

或者,您可以使用DSN或機器上的其他設置來保持它們的一致性。

否則,你必須修改/編輯你的安裝,在這種情況下,你應該看看http://wix.tramontana.co.hu/tutorial/user-interface-revisited

0

我建議將連接字符串存儲在註冊表中,通過搜索值可以檢索並將值存儲爲屬性。如果未找到該值,則可以將其視爲全新安裝並提示輸入值,或者將其作爲命令行屬性進行檢索。

搜索可以使用RegistrySearch這裏實現是一個例子:

<Property Id="DATABASECONNECTIONSTRING"> 
    <RegistrySearch Id="DbConnectionString" Root="HKLM" Key="MyDBConnectionStringLocation" Name="ConnectionString" Type="raw" /> 
</Property> 

要存儲的值使用RegsitryValue元素:

<Component Id="PersistentProperty" KeyPath="yes"> 
    <RegistryValue Id="DbConnectionString" Root="HKLM" Key="MyDBConnectionStringLocation" Value="[DATABASECONNECTIONSTRING]" Name="DbConnectionString" Type="string" /> 
</Component> 
相關問題