应用程序目录中所有用户的可写.config文件?

时间:2012-11-12 17:22:53

标签: c# .net app-config configuration-files

我需要一个通用的应用程序设置文件,我需要它在运行时由应用程序编辑。

我不想通过将“User”放在设置范围内来使用build in settings操作,因为它会保存在用户本地目录中。

另一方面,我不能将.config与“Application”一起使用,因为我无法从应用程序中保存到此文件中。

有人可能会说“创建你自己的存储设置XML文件很容易”..是的,但是我想知道在类中使用MS构建的常见可写配置文件的解决方案是什么?

1 个答案:

答案 0 :(得分:3)

要拥有所有用户都可以更新的数据,那么所有用户都需要能够保存到容纳该数据的任何容器。

这适用于从文本文件到RDBMS的任何格式。

您管理的文件(例如.config(XML)文件)的问题有两个:

  1. 并发。
  2. 访问控制。
  3. ConfigurationManager及其关联类将使用适用的配置元素和属性声明写入.exe.config文件,但基础文件必须是可写的。你需要:

    1. 在安装程序中设置ACL,以便所有(适用的)用户都具有写访问权限。这意味着他们也可以在应用程序之外编写,这是不可避免的,因为无法根据应用程序设置访问控制。

    2. Program Files之外安装。 UAC虚拟化写入Program Files(因此假设所有用户都可以在任何地方写入的应用程序不会中断),但这也意味着它不能用于共享可修改数据。

    3. 并发是另一个问题。两个用户一起修改共享数据是什么?除非您在更改时实施某些锁定和重新加载,否则一个用户将覆盖其他更改。

      考虑使用多用户数据库代替。它们是为这种事物而设计的,配置文件不是


      更新 (根据评论):

      要让(非管理员)用户更新程序文件中的.exe.config仍然会达到UAC虚拟化(即任何写入将被定向到每个用户的位置,而其他任何人都看不到)

      更容易使用ConfigurationManager.OpenExeConfiguration(string)方法从具有适当ACL的某个共享位置(例如.config 1 )加载C:\ProgramData。返回的Configuration对象具有.exe.config<appSettings>隐式加载的所有功能以及自定义部分,以及对SaveSaveAs的访问权限。< / p>


      1 当然使用正确的方法来获取实际的本地路径,而不是硬编码。