1

对不起,如果这很简单,我从大学起就没有编码。我正在尝试编写一个程序来查看 Windows 7 中的注册表项。我想先检查注册表值是否存在,然后检查该值是什么。如果它不存在,我想要一条消息,如果它确实存在,我想要一条消息反映值 1,另一条反映值 0。如果注册表项不存在,我让代码工作,但是如果我添加键和值,它就会崩溃。不知道我在这里做错了什么。任何建议,将不胜感激。这是我的代码。

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("");
}
4

3 回答 3

4

据我所知,该EnableOplocks注册表项的值是一个DWORD值,它会int在您使用时GetValue()为您提供检索它的值。尝试将 an 强制转换int为 astring会产生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")
    {
        // ...
    }
}

一般来说,请记住提供您拥有的所有错误信息。说“它崩溃了”并不是很有用。

于 2013-02-08T04:43:15.197 回答
1

注册表可以保存字符串以外的数据类型。正在发生的事情是您可能会得到一个int返回,这就是为什么当您尝试将 aint转换为 a时会崩溃的原因string

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

另一个选项是使用.ToString()而不是强制转换,您需要比较字符串 1(就像您现在一样)而不是值 1。但是,我总是更喜欢只使用正确的类型而不是将所有内容都转换为字符串。

于 2013-02-08T04:42:30.283 回答
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("");
}
于 2013-02-08T04:43:04.250 回答