[英]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
如果键不存在,则regKey1
为null
,并且由于显而易见的原因,对regKey1.GetValue()
的调用失败。
版本2
如果键不存在,则Registry.GetValue()
返回null
,因此为regValue1
分配了null
。
关于注册表视图和AnyCPU的问题,您目前正在寻求麻烦。 大概是要查看特定的注册表视图。 您应该使用RegistryView
枚举对此进行明确说明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.