繁体   English   中英

注册表值访问

[英]Registry Value Access

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

原始代码:

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 + regPath更改为Path.Combine(Registry.LocalMachine.Name, regPath) ,但是由于regPath以'\\'开头(该项目没有合并-无一例外)。 然后我意识到OpenSubKey()一开始也不喜欢'\\'。 从regPath删除此版本后,两个版本的工作原理相同。 感谢David,也感谢您对使用RegistryView枚举的建议。

版本1

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

版本2

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM