我需要有一个通用的应用程序设置文件,并且我需要它可以在运行时由应用程序编辑。
我不想通过将“用户”放在设置范围中来使用内置设置操作,因为它保存在用户本地目录中。
另一方面,我无法将 .config 与“应用程序”一起使用,因为我无法从应用程序内保存到此文件中。
有人可能会说“创建自己的保存设置 XML 文件很容易”。是的,可能是这样,但我想知道使用 MS 内置类的通用可写配置文件的解决方案是什么?
我需要有一个通用的应用程序设置文件,并且我需要它可以在运行时由应用程序编辑。
我不想通过将“用户”放在设置范围中来使用内置设置操作,因为它保存在用户本地目录中。
另一方面,我无法将 .config 与“应用程序”一起使用,因为我无法从应用程序内保存到此文件中。
有人可能会说“创建自己的保存设置 XML 文件很容易”。是的,可能是这样,但我想知道使用 MS 内置类的通用可写配置文件的解决方案是什么?
为了让所有用户都可以更新任何格式的数据,那么所有用户都需要能够保存到任何包含该数据的容器中。
这适用于任何格式,从文本文件到 RDBMS。
您管理的文件(例如.config
(XML)文件)的问题是双重的:
和关联的ConfigurationManager
类将写入.exe.config
具有配置元素和属性的适用声明的文件,但基础文件必须是可写的。您需要:
在安装程序中设置 ACL,以便所有(适用的)用户都具有写入权限。这意味着他们也可以在应用程序之外编写,这是不可避免的,因为无法根据应用程序设置访问控制。
安装在外面Program Files
。UAC 将写入虚拟化Program Files
(因此假设所有用户都可以在任何地方写入的应用程序不会中断),但这也意味着它不能用于共享的可修改数据。
并发是另一个问题。什么是两个用户一起修改共享数据?除非您在更改时实施某些锁定和重新加载,否则一个用户将覆盖其他更改。
考虑改为使用多用户数据库来存储数据。它们是为这种事情设计的,配置文件不是.
更新(基于评论):
让(非管理员)用户.exe.config
在 Program Files 中更新 a 仍然会命中 UAC 虚拟化(即,任何写入都将定向到每个用户的位置,并且对其他人不可见)。
更容易使用该ConfigurationManager.OpenExeConfiguration(string)
方法从具有适当 ACL的.config
某个共享位置(例如在C:\ProgramData
1中)加载 a。返回的对象具有从for和自定义部分Configuration
隐式加载的所有功能,以及对和的访问权限。.exe.config
<appSettings>
Save
SaveAs
1当然使用正确的方法来获取实际的本地路径,而不是硬编码。