很抱歉,如果这很简单,我从大学开始就没有编码。我试图编写一个程序来查看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("");
}
答案 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("");
}