我无法从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 ...
信息:
Bukkit GUI Project.exe中发生了类型为'System.NullReferenceException'的未处理异常
附加信息:对象引用未设置为对象的实例。
registry http://bumisworld.eu/locals2.png
有什么帮助吗?
最佳答案
我可以看到几个问题。
首先,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
。
关于c# - 无法从现有 key 读取值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23199914/