OpenSubKey()返回null,我可以在regedit.exe中看到一个registry项
我试图获取这个键内的所有子键的显示名称:
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()
方法给我的子项: {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}.KB2151757
它没有任何显示名称。
为什么我不能得到我需要的确切的子密钥( {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
),我怎样才能得到它?
64位操作系统上的32位应用程序将默认查看HKLM\Software\Wow6432Node
节点。 要读取密钥的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 -registry-从-A-32位应用程序或-反之亦然/