我无法从reg键读取值。出于某种奇怪的原因。路径是正确的..关键存在。我不知道它为什么无法阅读它。
我有一些代码(读取注册表)
string local = Microsoft.Win32.Registry.LocalMachine.ToString();
string javaRegPath = "\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\";
if (javaRegPath != null)
{
string javaVersion = Registry.readReg(local + javaRegPath, "CurrentVersion").ToString();
string javaHome = Registry.readReg(javaRegPath + "\\" + javaVersion, "JavaHome").ToString();
return javaHome;
}
Registry.cs(阅读)
public static object readReg(string keyPath, string keyName)
{
key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(keyPath);
return key.GetValue(keyName);
}
这是注册表编辑器中的图像。验证路径等。 registry http://bumisworld.eu/reg.png
但它只是返回一个NPE ......
消息: 类型' System.NullReferenceException'的未处理异常发生在Bukkit GUI Project.exe
附加信息:未将对象引用设置为对象的实例。
registry http://bumisworld.eu/locals2.png
对此有何帮助?
答案 0 :(得分:4)
我可以看到几个问题。
首先,readReg
实际上是在OpenSubKey
上调用Registry.CurrentUser
。该内容来自HKCU
。您需要Registry.LocalMachine
使用HKLM
。将根密钥作为额外参数传递给readReg
。
最重要的是,你可能会被registry redirector抓住。您的32位进程(我假设您的进程是32位)被重定向到注册表的32位视图。但是你要找的关键是注册表的64位视图。
换句话说,您访问HKLM\Software
的尝试被重定向到HKLM\Software\Wow6432Node
。
使用RegistryView
枚举允许32位进程访问注册表的64位视图。
还应修改您的readReg
功能,以检查对OpenSubKey
的调用中的错误。该方法可以返回null
。您应该以更干净的方式处理该场景,然后抛出NullReferenceException
。