我正在使用cookie切割器代码在C#中获取注册表项对象:
RegistryKey reg = Registry.LocalMachine.OpenSubKey("SOFTWARE\\MyNewKeyName\\");
运行此代码后reg = null
。但是,如果我将传递给OpenSubKey
的值转换为在SOFTWARE下的其他节点下的注册表中的任何值,reg
现在将具有值< / strong>即可。我已尝试使用此模式的多个键,它可以正常工作。如果我放任何没有其他子节点的任何键名,它就不起作用。最后,我试图在MyNewKeyName
内读取字符串值。
如果我的密码下面没有任何其他节点,为什么我的代码不起作用并填充reg
?
答案 0 :(得分:4)
事实证明,“32位”注册表和“64位”注册表中的值并不相同。因此,当通过'regedit'查看注册表并查看所有内容时,以编程方式,您可能没有,这就是我遇到的问题。我注意到这一点,运行GetSubKeyNames()
并检查返回的密钥。快速回答是检查注册表的两个版本以找到所寻求的值:
//Check the 64-bit registry for "HKEY_LOCAL_MACHINE\SOFTWARE" 1st:
RegistryKey localMachineRegistry64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey reg64 = localMachineRegistry64.OpenSubKey(registryKeyLocation, false);
if (reg64 != null)
{
return reg64.GetValue(registryKeyName, true).ToString();
}
//Check the 32-bit registry for "HKEY_LOCAL_MACHINE\SOFTWARE" if not found in the 64-bit registry:
RegistryKey localMachineRegistry32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
RegistryKey reg32 = localMachineRegistry32.OpenSubKey(registryKeyLocation, false);
if (reg32 != null)
{
return reg32.GetValue(registryKeyName, true).ToString();
}
答案 1 :(得分:1)
我认为问题是您将其编译为x86而不是将其编译为x64应用程序。请按照以下步骤操作: