C#无法访问某些注册表值

本文关键字:注册表 访问 | 更新日期: 2023-09-27 18:24:55

我需要读取HKEY_LOCAL_MACHINE''SOFTWARE''Wow6432Node''Classes''CLSID{CF2CF428-325B-48d3-8CA8-7633E36E5A32}''InprocServer32 的默认值

在我的项目选项中,"首选32位"未选中,平台目标为任何CPU,我在Windows-7 64位操作系统上运行。

我尝试了一切,读了很多关于这个问题的话题,但我仍然读不到这个值。

拜托,你能写出实际的代码吗?

我试过了,

RegistryKey LocalMachine32 = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32);
RegistryKey location = LocalMachine32.OpenSubKey(@"Software'Wow6432Node'Classes'CLSID'{CF2CF428-325B-48d3-8CA8-7633E36E5A32}'InprocServer32", true);
String myValue = location.GetValue("").ToString();

RegistryKey LocalMachine64 = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey location = LocalMachine64.OpenSubKey(@"Software'Wow6432Node'Classes'CLSID'{CF2CF428-325B-48d3-8CA8-7633E36E5A32}'InprocServer32", true);
String myValue = location.GetValue("").ToString();

RegistryKey LocalMachine64 = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey location = LocalMachine64.OpenSubKey(@"Software'Classes'CLSID'{CF2CF428-325B-48d3-8CA8-7633E36E5A32}'InprocServer32", true);
String myValue = location.GetValue("").ToString();

RegistryKey LocalMachine32 = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32);
RegistryKey location = LocalMachine32.OpenSubKey(@"Software'Classes'CLSID'{CF2CF428-325B-48d3-8CA8-7633E36E5A32}'InprocServer32", true);
String myValue = location.GetValue("").ToString();

但运气不佳:(

C#无法访问某些注册表值

据我所知,您无法通过.NET Framework调用来实现这一点;在过去,我曾使用P/Invoke调用advapi32.dll的RegOpenKeyEx、RegQueryValueEx和RegQueryValueEx方法来读取特定的位注册表。

下面是一篇文章,其中有一个例子:

http://blogs.msdn.com/b/cumgranosalis/archive/2005/12/19/win64registrypart2.aspx

编辑:这里讨论了它在Windows7中不起作用的原因(以及其他可能有用的资源):

如何从64位.NET应用程序打开WOW64注册表项