0

私が開発しているソフトウェアは、ユーザーのグローバル設定を保存する必要があります。現在、次の方法を使用して、ユーザーの下の 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 を使用してそこに構成を保存するにはどうすればよいですか? 構成ロジック全体を書き直したくありません。

4

0 に答える 0