查找注册表键值并返回注册表键值路径
问题描述:
我有一个代码,它在特定键路径中搜索注册表键值。 在注册表项中SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}
在注册表项的末尾找到与0000 , 0001 , 0002 , 0003
等等的所有密钥。 {4D36E972-E325-11CE-BFC1-08002BE10318}
。在每个密钥(例如0007
)中都有子网掩码NetCfgInstanceId
,其中包含网络接口卡ID值,如{C80949A4-CEDA-4F29-BFE2-059856D7F745}
。如果找到值,方法返回键路径! 问题是查找注册表键值并返回注册表键值路径
foreach (string key_value in key.GetValue("NetCfgInstanceId").ToString())
全部代码中的错误Cannot convert type 'char' to 'string'
是
public string key_path(RegistryKey root, string root_path, string search_key)
{
string path = string.Empty;
foreach (string keyname in root.GetSubKeyNames())
{
try
{
using (RegistryKey key = root.OpenSubKey(keyname, true))
{
foreach (string key_value in key.GetValue("NetCfgInstanceId").ToString())
{
if (key_value == search_key)
{
string reg_path = (string)key.GetValue("NetCfgInstanceId");
path = reg_path;
}
else
{
path = "Can't find key !";
}
}
}
}
catch (System.Security.SecurityException)
{
//Do nothing !!!
}
}
return path;
}
private void kryptonButton4_Click(object sender, EventArgs e)
{
var answer = key_path(Registry.LocalMachine, @"SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}", "{C80949A4-CEDA-4F29-BFE2-059856D7F745}");
MessageBox.Show(answer);
}
如何才能解决这个问题呢?
答
Foreach需要一个枚举值。您正在使用字符串作为该值,因此编译器需要在foreach中使用字符变量。换句话说,您对GetValue(...)。ToString()的调用不会返回一个字符串数组,它会返回一个字符串。 foreach(var string in stringval),var是一个char。
考虑这样的事情,而不是...
var kind = key.GetValueKind("NetCfgInstanceId");
if (kind == RegistryValueKind.MultiString)
{
foreach (var key_value in (string[])key.GetValue("NetCfgInstanceId"))
{
if (key_value == search_key)
{
string reg_path = (string)key.GetValue("NetCfgInstanceId");
path = reg_path;
}
else
{
path = "Can't find key !";
}
}
}
这是假设你期待在REG键多串。如果它可以是单个字符串,则可以使用以下内容...
if (kind == RegistryValueKind.ExpandString
|| kind == RegistryValueKind.String)
{
var key_value = (string)key.GetValue("NetCfgInstanceId");
if (key_value == search_key)
{
path = key_value;
}
else
{
path = "Can't find key !";
}
}
您可以使用此编写完整的代码吗?我不明白的东西。 :( – user1562839 2012-07-30 19:00:45
我得到错误var key_value = key.GetValue(“NetCfgInstanceId”); ///键找不到 – user1562839 2012-07-30 19:35:39
我找到解决方案..!千万不要照顾这个! – user1562839 2012-07-30 19:55:14