2

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

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

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

有人可能会说“创建自己的保存设置 XML 文件很容易”。是的,可能是这样,但我想知道使用 MS 内置类的通用可写配置文件的解决方案是什么?

4

1 回答 1

3

为了让所有用户都可以更新任何格式的数据,那么所有用户都需要能够保存到任何包含该数据的容器中。

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

您管理的文件(例如.config(XML)文件)的问题是双重的:

  1. 并发。
  2. 访问控制。

和关联的ConfigurationManager类将写入.exe.config具有配置元素和属性的适用声明的文件,但基础文件必须是可写的。您需要:

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

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

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

考虑改为使用多用户数据库来存储数据。它们是为这种事情设计的,配置文件不是.


更新(基于评论):

让(非管理员)用户.exe.config在 Program Files 中更新 a 仍然会命中 UAC 虚拟化(即,任何写入都将定向到每个用户的位置,并且对其他人不可见)。

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


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

于 2012-11-12T17:32:42.340 回答