如何解决OpenSubKey对于regedit.exe中可以看到的注册表项返回null
HKLM\Software\Wow6432Node
默认情况下,在64位OS上的32位应用程序将查看该节点。要读取密钥的64位版本,您需要指定RegistryView
:
using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
using (var key = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"))
{
// key Now points to the 64-bit key
}
.NET 4.0中已添加了用于执行此操作的API。如果您仍在使用3.5,则需要使用P / Invoke来访问64位密钥:http ://www.rhyous.com/2011/01/24/how-read- the-64-bit从32位应用程序注册或反之亦然/
解决方法
我正在尝试获取此键内所有子键的显示名称:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
使用此代码:
RegistryKey newKey;
string val;
string KeyPath64Bit = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
RegistryKey mainKey = Registry.LocalMachine.OpenSubKey(KeyPath64Bit);
string[] RegKeys64Bits = Registry.LocalMachine.OpenSubKey(KeyPath64Bit).GetSubKeyNames();
foreach (string s in RegKeys64Bits)
{
newKey = mainKey.OpenSubKey(s);
val = newKey.GetValue("DisplayName",-1,RegistryValueOptions.None).ToString();
if (val != "-1")
file64.WriteLine(val);
}
运行代码后,我找不到我需要的键之一:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
它应该具有显示名称:Microsoft Visual C ++ 2010 x64
Redistributable-10.0.30319,但是该GetSubKeyNames()
方法为我提供了sub
key:{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}.KB2151757
它没有任何显示名称。
为什么我无法获得所需的确切子键({DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
),又如何获得呢?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。