使用C#从注册表创建对象

时间:2011-04-12 20:20:39

标签: c#

所以这就是我想要的。我在注册表中为每个特定进程都有几个日志记录键。

我希望在程序启动时从这些对象中创建一个对象,这样我就可以在需要时访问这些值,所以基本上它们都是预加载的。

以下是我到目前为止的课程:

class LoggingInfo
{

    //field data

    private String LogName;
    private int DailyFile;


    // Constructors. 
    public LoggingInfo() { }
    public LoggingInfo(String LogName, int DailyFile)
    {
        this.LogName = LogName;
        this.DailyFile = LogDailyFile;

    }

}

那么如何从注册表中获取LoggingInfo对象的属性呢?在我的主程序中,我需要传递任何内容吗?

5 个答案:

答案 0 :(得分:1)

查看Microsoft.Win32名称空间,特别是类RegistryKey。

您需要手动连接到注册表(可能是通过循环吗?)到注册表项,您要保存密钥并为您找到的每个密钥实例化您的课程。

答案 1 :(得分:0)

link应该会有所帮助。不要显示值,而是将它们设置在对象中。

答案 2 :(得分:0)

注册表不是由POCO's组成的,所以你必须自己实现。

有一个项目Poco::Util::WinRegistry。值得一看。

答案 3 :(得分:0)

正如@ 0A0D所说,注册表不存储对象。但是,它可以存储字符串。如果序列化对象为JSON或XML字符串并将它们存储在注册表中,您可以稍后从这些相同的键加载字符串值,然后将字符串反序列化到对象中。 / p>

您可能需要搜索MSDN以获取有关序列化的更多信息。例如,DataContractSerializer文章将是一个很好的起点。

答案 4 :(得分:0)

你想要这样的东西:

private const string m_sKeyPathString = "XXX\\YYY";
private const string m_sKeyVal = "MY_VAL";

RegistryKey key = Registry.CurrentUser.OpenSubKey(m_sKeyPathString);

if(key == null)
    key = Registry.CurrentUser.CreateSubKey(m_sKeyPathString);

if(key.GetValue(m_sKeyVal) != null)
    string sMyString = (string)key.GetValue(m_sKeyVal);

然后你可以用字符串做任何你想做的事情(转换为int,double,date等)