私が開発しているソフトウェアは、ユーザーのグローバル設定を保存する必要があります。現在、次の方法を使用して、ユーザーの下の 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);
}
}
残りは、config からデータを読み取る関数だけです。
以前は、アプリケーションはカスタム フォルダーに保存されていましたが、現在は要件が変更されており、Program Files の下に配置する必要があります。カスタム フォルダーを使用した場合、アプリケーションはそのフォルダーへの書き込みアクセス権を持っていたため、グローバル設定の保存は次の 2 つの変更を行うのと同じくらい簡単でした。
Config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
と
section.SectionInformation.AllowExeDefinition = ConfigurationAllowExeDefinition.MachineOnly;
ただし、Program Files では、そこに書き込むには管理者である必要があります。では、グローバル アプリケーション データを格納するにはどうすればよいでしょうか。というか、この問題のベストプラクティスは何ですか?
また、私はプログラム データを知っています。それが正しい場所である場合、ConfigurationManager を使用してそこに構成を保存するにはどうすればよいですか? 構成ロジック全体を書き直したくありません。