2015-02-11 101 views
1

我有一個.NET 4.0與數據庫(SQLite)的winform應用程序。我需要爲用戶添加一個選項,以便能夠更改包含數據庫的文件的路徑 - 簡而言之,就是更改連接字符串。我用的app.config保存連接字符串是這樣的:C#WinForm應用程序 - 如何保存連接字符串(SQLite)

<connectionStrings> 
<add name="connectionString" connectionString="Data Source=D:\myDatabase.db; FailIfMissing=True; Version=3"/> 
</connectionStrings> 

有沒有一種方法可以讓用戶修改app.config文件(它位於Program Files文件夾)?我不想以管理員身份運行應用程序,只有在嘗試修改app.config文件時,是否有辦法暫時授予用戶管理員權限?

如果您有更好的建議持續存儲連接字符串,請分享。

謝謝!

編輯: 其實我可以改變app.config文件:

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.ConnectionStrings.ConnectionStrings["connectionString"].ConnectionString = "Data Source=" + path + "; FailIfMissing=True; Version=3"; 
config.Save(); 
ConfigurationManager.RefreshSection("connectionStrings"); 

問題是當用戶不是管理員,對文件的訪問被拒絕。是否有解決方法(我不想以管理員身份運行該應用程序)?還是有更好的方法來存儲我的連接字符串?

回答

1

我想你想要做的就是使用設置(而不是使用app.config)。看到這個:https://msdn.microsoft.com/en-us/library/aa730869%28v=vs.80%29.aspx

它基本上與配置文件相同,但給用戶(和你)方便的訪問。

第一套設計一個默認的連接字符串:enter image description here

然後訪問它像textBox1.Text = Properties.Settings.Default.connectionString;

做反向保存它:Properties.Settings.Default.connectionString = textBox1.Text;

而且一定要保存:Properties.Settings.Default.Save();

+0

如何從設置中獲取連接字符串?對於app.config我使用String conn = ConfigurationManager.ConnectionStrings [「connectionString」]。ConnectionString; – user1080533 2015-02-11 18:20:15

+0

@ user1080533編輯顯示實施。 – DrewJordan 2015-02-11 18:56:14

+0

謝謝,會走這條路 – user1080533 2015-02-11 19:02:54

0

這可以幫助:

private static void UpdateSetting(string key, string value) 
{ 
    Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
    configuration.AppSettings.Settings[key].Value = value; 
    configuration.Save(); 

    ConfigurationManager.RefreshSection("appSettings"); 
} 

來源:App.Config change value

+0

我嘗試使用ConfigurationManager,問題是當用戶不是管理員並且對app.config文件的訪問被拒絕時。 – user1080533 2015-02-11 17:01:52

+0

你確定這不是一個特定於調試器的問題嗎?您是否嘗試在調試環境之外運行應用程序?沒有任何意義的事情會發生。嘗試以管理員身份運行它。 – 2015-02-11 17:32:24

1

你應該使用專用的文件夾。無論是LocalApplicationData(適用於當前用戶 - 本地只),或的ApplicationData(適用於當前用戶 - 漫遊):

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

這是你應該存放路徑\連接字符串由用戶選擇的數據庫文件。這些文件夾是爲Windows OS上的所有用戶配置文件創建的。例如,如果您的登錄名是「Hari」,那麼路徑將是「C:\ Users \ Hari \ AppData \ Local」。哈里完全可以訪問這條路,所以他可以寫信給它。

此外,這允許多個用戶使用您的軟件。他們不會互相推step。他們都將擁有自己的DB文件。如果這不是你想要的東西,那麼你可以使用這裏提到的其他特殊文件夾(如CommonApplicationData):

https://msdn.microsoft.com/en-us/library/system.environment.specialfolder%28v=vs.110%29.aspx

但是使用它們中的一些可能需要有管理員權限。 (對於我上面描述的兩個特殊文件夾,您不需要管理員權限。)在這種情況下,您可以在安裝時詢問數據庫文件路徑。