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

时间:2013-04-30 18:27:39

标签: c# vb.net visual-studio-2010 .net-4.0 application-settings

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

  

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

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

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

  •   

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

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

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

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

3 个答案:

答案 0 :(得分:4)

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

是的,它是您自己的代码,但它是非常简单的代码,比尝试确定是否有一个组件提供您需要的内容以及如何自定义它所花费的时间更少。

答案 1 :(得分:3)

在这里阅读答案并使用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)

添加新值。

答案 2 :(得分:1)

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