2013-04-30 28 views
8

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

有两种类型的应用程序设置的基础上,范围:

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

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

我可以写代码编辑的app.config XML文件,但因为它位于程序目录下,它的Windows下的保护7.因此,这也不是没有可能提升程序或NTFS打权利。

所以我需要将配置文件写入像System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)这样的通用文件夹。

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

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

回答

4

我有类似的问题,并最终编写我自己的设置类。这是非常基本的。我使用我需要的属性创建了一个Settings类,使用Save()和Load()方法创建了SettingsManager,它们通过XmlSerializer将对象简单地序列化/反序列化到文件中或从文件中反序列化。

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

+0

你能分享你的代码吗? – 2014-06-14 01:27:43

+0

查看有关如何执行此操作的示例:https://msdn.microsoft.com/en-gb/library/ms973902.aspx#persistappsettnet_creatingcustomclass – Simon 2017-04-01 08:55:39

1

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

+0

如果我用'设置'替换'数据',这是有道理的,但是您能否扩展最后一句话?你的基本意思是我需要编写自己的* Setting Manager *,确保我创建了一个文件夹来保存'CommonApplicationData'中的配置文件并在其上写入/读取XML。有没有我可以轻松继承的类或接口我可以实现完成这些东西? – DavRob60 2013-04-30 18:43:48

+0

@ DavRob60没有 - 不幸的是,在那个句柄中没有内置“设置管理器”。不过,您可以使用XDocument(http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.aspx)和类似的语言来简化XML的读写。 – 2013-04-30 18:46:04

+0

[SettingsProvider Class](http://msdn.microsoft.com/en-us/library/system.configuration.settingsprovider%28v=vs.100%29.aspx)如何?有没有什么可以构建的,是完全不同的,还是没有试图惹恼这件事情的麻烦? – DavRob60 2013-04-30 18:57:52

2

这里读书的答案,并与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) 

添加一个新的价值没有奏效。

相关问题