2015-02-11 97 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

但是使用它们中的一些可能需要有管理员权限。 (对于我上面描述的两个特殊文件夹,您不需要管理员权限。)在这种情况下,您可以在安装时询问数据库文件路径。