C# .net桌面应用程序-如何存储/更改应用程序设置或连接字符串?

C# .net桌面应用程序-如何存储/更改应用程序设置或连接字符串?,c#,.net,connection-string,desktop-application,application-settings,C#,.net,Connection String,Desktop Application,Application Settings,我需要让用户能够更改应用程序设置,在本例中是应用程序数据库的位置。我注意到应用程序设置在运行时是只读的,但这需要是应用程序范围的,而不是特定于用户的。如何在运行时可更改的windows.forms中持久化应用程序范围的连接字符串?您可以使用 ConfigurationManager.AppSettings.Set() 也 也可以设置 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUs

我需要让用户能够更改应用程序设置,在本例中是应用程序数据库的位置。我注意到应用程序设置在运行时是只读的,但这需要是应用程序范围的,而不是特定于用户的。如何在运行时可更改的windows.forms中持久化应用程序范围的连接字符串?

您可以使用

ConfigurationManager.AppSettings.Set()

也可以设置

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Add("test","tada");
config.Save(ConfigurationSaveMode.Minimal, true);

框架中没有一种直接的方法使用较新的设置类-您可以使用设置支持保存用户级别的设置,但不能保存应用程序/计算机级别的设置。最简单的方法是对类进行XmlSerialize,并将其存储在一个目录中,当所有具有写访问权限的用户在非提升状态下运行时,该目录将在这些用户之间共享,例如公共文档文件夹(不应将程序目录写入),例如..
Environment.SpecialFolder.CommonApplicationData


编辑:是的,旧的appSettings机制有一种写入方式,但这是个坏消息-较新的设置工具忽略了此功能,因为尝试写入程序文件中的配置文件是个坏消息,您不想写入因编辑而删除的Progrm Files目录-1-但如果您要这样做,您绝对不应该在EXE旁边或EXE的.config文件中写入-您应该写入用户范围而不是应用程序范围的AppSettings目录,“不是吗?”蓝色拉贾-丹尼·普夫卢霍夫特:我的答案文本就是这么说的。我刚才添加了斜体部分以使其100%清晰,嗯…我的意思是
%AppData%
目录是用户范围的,而不是应用程序范围的-这与“AppSettings目录”是一样的吗?@BlueRaja-Danny pflughoft:是的,实际上已经阅读了我的答案,我认为它很好地避免了这个问题,因为它没有说应该/实际上/把它放在哪里-一个公共文档文件夹就是答案,而且比调整程序文件子目录的权限或允许onself通过虚拟化重定向到ProgramDataSee要好得多