如何使可在运行时更改的应用程序设置共享给所有用户



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

基于作用域,有两种类型的应用程序设置:
  • 应用程序范围的设置可用于诸如Web服务的URL或数据库连接字符串之类的信息。这些值与应用程序相关联。因此,用户不能在运行时更改它们。

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

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

所以我需要将配置文件写在像System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)这样的公共文件夹中。

但这是一个相当常见的需求!

所以,我想知道是否有一种简单的方法来实现这一点,而不用重新发明轮子,或者如果我必须写我自己的设置管理器

在阅读了这里的答案并玩了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)

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

是的,这是你自己的代码,但它是非常简单的代码,花费的时间比试图找出是否有一个组件提供你需要的,以及如何自定义它。

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

最新更新