Registry.GetValue始终返回null

MoS*_*She 18 c# registry

我的注册表中有以下密钥:

在:HKEY_LOCAL_MACHINE\SOFTWARE\RSA我有值对象调用 - WebExControlManagerPath它的值是c:\

我想这样做:

var r = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\RSA", "WebExControlManagerPth",null);

if(r!=null)
    ProcessAsUser.Launch(ToString());
Run Code Online (Sandbox Code Playgroud)

r价值总是空的.

在此输入图像描述

有任何想法吗?

Pal*_*mar 46

声明杰森是正确的,操作系统是这个问题,下面的代码将帮助您解决.

RegistryKey localKey;
if(Environment.Is64BitOperatingSystem)
    localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
else
    localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);

string value = localKey.OpenSubKey("RSA").GetValue("WebExControlManagerPth").ToString();
Run Code Online (Sandbox Code Playgroud)

  • 优秀的修复,无需编译"任何CPU"..这应该是最好的答案. (2认同)

Jas*_*son 19

您不像在批处理脚本中那样访问HKEY_LOCAL_MACHINE配置单元,就像在C#中一样.你这样打电话Registry.LocalMachine:

        RegistryKey myKey = Registry.LocalMachine.OpenSubKey( @"Software\RSA", false);
        String value = (String)myKey.GetValue("WebExControlManagerPth");

        if (!String.IsNullOrEmpty(value))
        {
            ProcessAsUser.Launch(ToString());
        }
Run Code Online (Sandbox Code Playgroud)

更新:

如果返回null,请将构建体系结构设置为Any CPU.操作系统可以不同地虚拟化32位和64位注册表.请参阅:http://msdn.microsoft.com/en-us/library/windows/desktop/aa965884%28v=vs.85%29.aspx,从32位应用程序读取64位注册表,以及http://msdn.microsoft .com/zh-CN/library/windows/desktop/ms724072%28v = vs.85%29.aspx.

  • 由于这个原因,也更新了我的帖子. (2认同)

小智 5

如果您使用的是 64 位操作系统,当您尝试获取 HKEY_LOCAL_MACHINE\SOFTWARE\RSA它时实际上是在寻找HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\RSA 这就是为什么您得到 null

  • 如果您还提供一些解决方案,那将是一个更好的答案。如果没有,请将此作为对问题的评论。 (2认同)