AppSettings,UserSettings和注册表项

时间:2012-08-27 20:22:32

标签: c# registry app-config appsettings settings

基本上我有一个C#应用程序,它具有某些设置,我希望任何用户都可以更改,但我希望这些设置适用于所有用户。 (确切的实现是针对特定于计算机的但不是特定于用户的项目,例如文件夹路径和COM端口等)到目前为止,我已经使用appSettings实现了这一点并且它一直运行良好但是当用户没有权限时这会崩溃写入Program Files目录。

我正在寻找有关如何利用appSettings,userSettings或注册表中的值来最好地处理这种情况的建议。无论我使用什么解决方案,都必须为不是管理员的用户以及那些不是管理员的用户工作。什么被认为是这类要求的“最佳实践”?

2 个答案:

答案 0 :(得分:2)

我将尝试编写一个包含所有需要读/写的设置的XML文件 此文件可以保存在ProgramData等众所周知的文件夹中(使用Enviroment.SpecialFolder.CommonApplicationData)

最简单的方法是使用数据表WriteXml和ReadXml的内置方法。
您可以使用数据表实现一个内部加载和保存设置的类,并提供方法来检索和设置单个设置(数据表中的行);

public class MyAppSettings
{
    // Where to store your settings
    private DataTable _storage = null;

    public MyAppSettings()
    {
       string settingFile = Path.Combine(Environment.GetFolderPath
                            (Environment.SpecialFolder.CommonApplicationData), 
                            "MyAppName", "MyAppSettings.xml");
       _storage = new DataTable();
       _storage.ReadXml(settingFile);
    }
    public void Save()
    {
       string settingFile = Path.Combine(Environment.GetFolderPath
                            (Environment.SpecialFolder.CommonApplicationData), 
                            "MyAppName", "MyAppSettings.xml");
       _storage.WriteXml(settingFile);
    }

    public string GetValue(string settingName)
    {
        // Code to search the base table
    }
    public void SetValue(string settingName, string settingValue)
    {
        // Code to update/insert the base table
    }
}

答案 1 :(得分:1)

您应该使用Application Settings

Visual Studio provides good support并使用您声明的属性(设置)自动生成访问者类。