在Properties.Settings.Default和Registry中存储设置

时间:2013-04-02 12:51:12

标签: c# .net configuration registry settings

中存储应用程序的用户设置有什么区别

Properties.Settings.Default

与将其存储在注册表中说

HKEY_CURRENT_USER\Software\{Application Name}

4 个答案:

答案 0 :(得分:3)

不同之处在于注册表是注册表。而Properties.Settings.Default保存到AppData目录中的配置文件中。

我个人不喜欢与书记官处合作。这只是我在Windows 98时代留下的恐惧症。无论如何,使用注册表并不是一个很好的经验。关键名称是丑陋的,并且有很多可能造成混乱。

答案 1 :(得分:2)

<强> Properties.Settings.Default

在执行之间存储应用程序状态的常用技术是将其写入磁盘。有很多方法可以做到这一点,微软通过在System.Configuration命名空间中引入类来帮助用户管理保存应用程序状态(设置),从而跳入游戏。

Properties.Settings.Default是一个派生自ApplicationSettingBase的类的静态实例,它管理对磁盘的设置读取和写入。标记有[UserScopedSetting]属性的属性将保存到C:\ Users \ user \ AppData \ Local \ ComapnyName \ Hashed_AppName \ version中的XML文件中,该文件可由用户读取和写入。标有[ApplicationScopedSetting]属性的属性将保存到app.config文件中,只能读取。

基本设置文件如下所示:

class FormSettings : ApplicationSettingsBase
{
    public WindowSettings() {}
    public WindowSettings(string settingsKey) : base(settingsKey) {}

    [UserScopedSettingAttribute()]
    [DefaultSettingValueAttribute("MyDefaultName")]
    public String Name
    {
        get { return (string)(this["Name"]); }
        set { this["Name"] = value; }
    }
}

您可以在用户界面,“项目属性” - >“设置”下设置Properties.Settings.Default中的值,也可以通过Properties.Settings.Default进行编程。

<强>注册表

注册表是一个分层数据库,用于存储配置设置和选项,并将它们存储为键值对。有关详细信息,请参阅Wikipedia

可以通过静态Microsoft.Win32.Registry类访问注册表,这将允许您读取和写入值。例如:

public class RegistryExample 
{
    public static void Main()
    {
        const string rootUser = "HKEY_CURRENT_USER";
        const string subkey = "RegistryExample";
        const string keyName = String.Format("{0}\\{1}, userRoot, subkey);

        Registry.SetValue(keyName, "MyRegistryValue", 1234);
    }
}

有关示例,请参阅MSDN文档页面。正如其他人提到的那样,使用注册表有利有弊,但我认为值得再次声明注册表是一个“安全”的位置,并且您的用户需要获得权限才能从中读取写入,而不需要设置文件那些权限。

答案 2 :(得分:1)

来自codehill.com

  

在.NET Framework应用程序设置保存在INI文件之前   和Windows注册表。但.NET Framework引入了很多   使用XML文件的更简单方法。该文件具有程序集的名称   和.exe.config扩展名,并放在应用程序的内部   夹。这种方式更清晰,因为卸载了一个应用程序   或删除最终用户不必担心遗留下来   Windows目录中的注册表项或INI文件。

答案 3 :(得分:0)

保存像Properties.Settings.Default这样的设置是唯一正确的方法。

注册表是禁止的。您不确定使用您的应用程序的用户是否有足够的权限写入注册表。