我正在开发的软件需要为用户存储一些全局设置。目前,我使用这种方法将所有内容存储在用户下的 appdata 中:
public virtual void Load()
{
try
{
lock (ConfigLock)
{
if (Config != null)
Config.Save(ConfigurationSaveMode.Full);
Config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoaming);
}
}
catch (Exception ex)
{
RicoLog.Instance.Error("UserConfig", ex.Message);
}
}
public virtual void AddSection(string name, ConfigurationSection section)
{
if (Config == null)
Load();
try
{
lock (ConfigLock)
{
section.SectionInformation.AllowExeDefinition = ConfigurationAllowExeDefinition.MachineToLocalUser;
Config.Sections.Add(name, section);
Save(section);
}
}
catch (Exception ex)
{
RicoLog.Instance.Error("UserConfig", ex.Message);
}
}
其余的只是从配置中读取数据的功能。
以前,应用程序存储在自定义文件夹下,但现在需求发生了变化,我们需要将其放在 Program Files 下。当我们使用自定义文件夹时,存储全局设置就像进行这两项更改一样简单,因为应用程序对该文件夹具有写入权限:
Config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
和
section.SectionInformation.AllowExeDefinition = ConfigurationAllowExeDefinition.MachineOnly;
但是,在 Program Files 中,您需要成为管理员才能在此处写入。那么,如何存储全局应用程序数据呢?或者更确切地说,这方面的最佳做法是什么?
另外,我知道程序数据,如果那是正确的位置,我如何使用 ConfigurationManager 将配置存储在那里?我宁愿不重写整个配置逻辑。