Search code examples
c#registry

Registry.GetValue always return null


I have the following key in my registry:

under:HKEY_LOCAL_MACHINE\SOFTWARE\RSA I have value object call - WebExControlManagerPath and its value is c:\

I am trying to do this:

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

if(r!=null)
    ProcessAsUser.Launch(ToString());

But r value is always null.

enter image description here

Any ideas?


Solution

  • You don't access the HKEY_LOCAL_MACHINE hive the same way you do in C# as you would in batch scripting. You call Registry.LocalMachine, as such:

    RegistryKey myKey = Registry.LocalMachine.OpenSubKey( @"Software\RSA", false);
    String value = (String)myKey.GetValue("WebExControlManagerPth");
    
    if (!String.IsNullOrEmpty(value))
    {
        ProcessAsUser.Launch(ToString());
    }
    

    Update:

    If it returns null, set your build architecture to Any CPU. The operating system may virtualize 32-bit and 64-bit registries differently. See: http://msdn.microsoft.com/en-us/library/windows/desktop/aa965884%28v=vs.85%29.aspx, Reading 64bit Registry from a 32bit application, and http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072%28v=vs.85%29.aspx.