在C#中获取注册表项和值

时间:2013-02-08 04:26:16

标签: c#

很抱歉,如果这很简单,我从大学开始就没有编码。我试图编写一个程序来查看Windows 7中的注册表项。我想先查看注册表值是否存在,然后检查该值是什么。如果它不存在,我想要一条消息,如果它确实存在,我想要一条反映值为1的消息,另一条反映值为0.如果注册表键没有&#39,我会得到代码。 ; t存在,但如果我添加键和值它崩溃。不知道我在这里做错了什么。任何建议,将不胜感激。这是我的代码。

using (RegistryKey Key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\services\LanmanServer\Parameters"))
if (Key != null)
{
    string val = (string)Key.GetValue("EnableOplocks");
    if (val == null)
    {
        oplockTextBox.Text = "Not Present In Registry";
        oplockTextBox.BackColor = Color.Yellow;
    }
    else if (val == "1")
    {
        opslockTextBox.Text = "NO";
        opslockTextBox.BackColor = Color.Red;
    }
    else
    {
        oplockTextBox.Text = "YES";
        oplockTextBox.BackColor = Color.Green;
    }
}
else
{
    MessageBox.Show("");
}

3 个答案:

答案 0 :(得分:4)

据我所知,该注册表项的EnableOplocks值为DWORD值,当您使用int检索时,它会为您提供GetValue()它。尝试将int投射到string会产生InvalidCastException

相反,你应该试试这个:

int? val = Key.GetValue("EnableOplocks") as int?;
if (val == null)
{
    // ..
}
else if (val == 1)
{
    // ...
}

或者这个:

object val = Key.GetValue("EnableOplocks");
if (val == null)
{
    // ...
}
else
{
    string strVal = val.ToString();
    if (strVal == "1")
    {
        // ...
    }
}

一般情况下,请记得提供所有的错误信息。说“它崩溃”并不是很有用。

答案 1 :(得分:1)

注册表可以保存除string之外的数据类型。发生了什么事情,您可能会收到int,这就是当您尝试将int转换为string

时崩溃的原因

获取值并将其存储在object中并让调试器中断。然后,您应该能够看到对象中存储的数据类型,并更改代码以进行正确的转换。

另一个选项是使用.ToString()而不是强制转换,你需要比较字符串1(就像你现在一样)而不是值1.然而,我总是喜欢只使用正确的类型将一切都变成字符串。

答案 2 :(得分:1)

使用跟随;

string val = Key.GetValue("EnableOplocks").ToString();  

编辑

using (RegistryKey Key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\services\LanmanServer\Parameters"))
if (Key != null)
{
    var val = Key.GetValue("EnableOplocks");
    if (val == null)
    {
        oplockTextBox.Text = "Not Present In Registry";
        oplockTextBox.BackColor = Color.Yellow;
    }
    else if (val.ToString() == "1")
    {
        opslockTextBox.Text = "NO";
        opslockTextBox.BackColor = Color.Red;
    }
    else
    {
        oplockTextBox.Text = "YES";
        oplockTextBox.BackColor = Color.Green;
    }
}
else
{
    MessageBox.Show("");
}