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

时间:2013-07-26 02:49:41

标签: c# registry clsid

我需要读取默认值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();

但没有运气:(

1 个答案:

答案 0 :(得分:0)

据我所知,你无法使用.NET Framework调用执行此操作;在过去,我使用P / Invoke调用advapi32.dll的RegOpenKeyEx,RegQueryValueEx和RegQueryValueEx方法来读取特定的位数注册表。

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

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

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

How to open a WOW64 registry key from a 64-bit .NET application