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

3

我需要让用户有能力更改应用程序设置,例如应用程序数据库的位置。我注意到应用程序设置在运行时是只读的,但这需要在应用程序范围内,而不是针对特定用户。如何在windows.forms中持久保存应用程序级别的连接字符串,并且可以在运行时更改?


请参见https://dev59.com/F3RB5IYBdhLWcg3w9b59。 - Ruben Bartelink
2个回答

2

您可以使用

ConfigurationManager.AppSettings.Set()

另外,ConnectionStringSettings.ConnectionString 属性也可以被设置。

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

-1:仅适用于用户级别的内容,您不希望写入Program Files目录。 - Ruben Bartelink
如果您要这样做,那么您绝对不应该在EXE旁边或EXE的.config文件中编写 - 您应该编写到AppSettings目录。 - Ruben Bartelink

0

在使用较新的Settings类时,框架中没有直接的方法 - 您可以使用Settings支持保存用户级别的设置,但不是应用程序/机器级别。最简单的方法是XmlSerialize一个类并将其存储在所有用户都具有写访问权限的目录中,例如Public Documents文件夹(程序目录不应被写入),例如Environment.SpecialFolder.CommonApplicationData

编辑:是的,旧的appSettings机制有一种写入方式,但这是个坏消息 - 较新的Settings工具省略了此功能,因为尝试写入Program Files中的配置文件对于很多原因来说都是个坏消息。


那将是用户范围,而不是应用程序范围,对吗? - BlueRaja - Danny Pflughoeft
@Blue Raja - Danny Pflughoeft:这就是我的答案所说的内容。我刚刚添加了斜体部分,以使其100%清晰,希望有所帮助... - Ruben Bartelink
我的意思是 %AppData% 目录是用户级别的,而不是应用程序级别的 - 这和 "AppSettings 目录" 是一样的吗? - BlueRaja - Danny Pflughoeft
@BlueRaja - Danny Pflughoeft:是的,实际上阅读了我的答案后,我发现它很好地避开了问题,因为它没有说应该实际把它放在哪里——一个常见的文档文件夹就是答案,比如调整Program Files子目录的权限或允许自己通过虚拟化被重定向到ProgramData要好得多。 - Ruben Bartelink

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接