8

我需要一些将在计算机的所有用户之间共享的应用程序设置,但也可以在运行时更改。那个接缝很简单,但根据应用程序设置 MSDN 文章,它是一个或另一个。

根据范围,有两种类型的应用程序设置:

  • 应用程序范围的设置可用于 Web 服务的 URL 或数据库连接字符串等信息。这些值与应用程序相关联。因此,用户无法在运行时更改它们。

  • 用户范围的设置可用于保存表单的最后位置或字体首选项等信息。用户可以在运行时更改这些值。

我可以编写代码来编辑 app.config XML 文件,但由于它位于程序目录中,因此在 Windows 7 下受到保护。因此,如果不提升程序或使用 NTFS 权限,这是不可能的。

所以我需要将配置文件写入一个通用文件夹,如System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData).

但这是一个相当普遍的要求!

所以,我想知道是否有一种简单的方法可以在不重新发明轮子的情况下实现这一目标,或者我是否必须编写自己的Setting Manager

4

3 回答 3

5

在阅读了此处的答案并使用了这些ConfigurationManager.Open方法后,我得到了以下结果:

string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "MyApp", "MyApp.config");
Configuration MyAppConfig = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = path }, ConfigurationUserLevel.None);

好的部分是文件不必存在,如果你调用Save()它,它会为你创建文件夹和文件。AppSettings["key"]虽然没有用,所以我不得不使用

MyAppConfig.AppSettings.Settings["key"].Value

读取和写入现有值和

MyAppConfig.AppSettings.Settings.Add("key", value)

添加新值。

于 2014-08-26T12:24:15.113 回答
4

我遇到了类似的问题,最终编写了自己的设置类。这是非常基本的。我创建了一个具有所需属性的 Settings 类,以及一个具有 Save() 和 Load() 方法的 SettingsManager,它们通过 XmlSerializer 将对象序列化/反序列化到文件中/从文件中提取。

是的,它是你自己的代码,但它是非常简单的代码,比试图弄清楚是否有一个组件提供了你需要的东西以及如何定制它所花费的时间更少。

于 2013-04-30T19:11:14.740 回答
1

应用程序设置基础结构不支持这一点 - 仅支持不可编辑的应用程序数据和用户范围的数据。但是,您可以轻松地在文件夹中读取和写入自己的 XML CommonApplicationData,而不是使用应用程序数据。

于 2013-04-30T18:29:44.400 回答