注册表值访问

Ben

我一直在尝试弄清为什么我无法访问注册表中的值。我最终提出了一个可能的解决方案,但我想知道为什么一个可行而另一个却不可行,以及我是否可以继续使用此解决方案。

原始代码:

RegistryKey regKey1 = Registry.LocalMachine.OpenSubKey(regPath);
string regValue1 = (string)regKey1.GetValue("CodeBase");

此操作失败,因为regKey1为null

可能的替代方法(可行):

string regValue2 = (string)Registry.GetValue(Registry.LocalMachine.Name + regPath, "CodeBase", String.Empty);

根据这篇文章,如果程序是针对32位编译的,并且在64位计算机上运行,​​则应该有另一种访问注册表的方式。我正在使用Windows 7的64位版本,并且正在为“任何CPU”编译该程序。但是,如果这是原因,那么我希望上述两种解决方案都将失败。

有人可以解释一下区别吗?

编辑:

找到了问题。

regPath = @"\SOFTWARE\Wow6432Node\Classes\CLSID\ ...";

由于David Heffernan的评论,我将其更改Registry.LocalMachine.Name + regPathPath.Combine(Registry.LocalMachine.Name, regPath),但是由于regPath以'\'开头(这些项没有合并-毫无例外),所以该命令一开始没有用。然后我意识到OpenSubKey()一开始也不喜欢'\'。从regPath删除此版本后,两个版本的工作原理相同。感谢David,也感谢您对使用RegistryView枚举的建议。

大卫·赫弗南(David Heffernan)

版本1

如果键不存在,regKey1则为null,并且regKey1.GetValue()由于显而易见的原因,对的调用失败。

版本2

如果键不存在,则Registry.GetValue()返回null,并regValue1因此被分配null


关于注册表视图和AnyCPU的问题,您目前正在寻求麻烦。大概是您要查看特定的注册表视图。通过使用RegistryView枚举,您应该对此明确

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章