Registry.GetValue всегда возвращает null - программирование
Подтвердить что ты не робот

Registry.GetValue всегда возвращает null

У меня есть следующий ключ в моем реестре:

under: HKEY_LOCAL_MACHINE\SOFTWARE\RSA У меня есть вызов объекта значения - WebExControlManagerPath, и его значение c:\

Я пытаюсь сделать это:

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

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

Но значение r всегда равно null.

enter image description here

Любые идеи?

4b9b3361

Ответ 1

Вы не получаете доступ к кусту HKEY_LOCAL_MACHINE так же, как и в С#, как в пакетном сценарии. Вы вызываете Registry.LocalMachine, как таковой:

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

        if (!String.IsNullOrEmpty(value))
        {
            ProcessAsUser.Launch(ToString());
        }

Update:

Если он возвращает null, установите архитектуру сборки в любой процессор. Операционная система может виртуализировать 32-разрядные и 64-разрядные реестры по-разному. Смотрите: http://msdn.microsoft.com/en-us/library/windows/desktop/aa965884%28v=vs.85%29.aspx, Чтение 64-битного реестра из 32-битного приложения и http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072%28v=vs.85%29.aspx.

Ответ 2

Оператор Джейсон прав, операционная система - проблема, приведенный ниже код поможет вы должны решить.

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();

Ответ 3

если вы используете 64-битную операционную систему, когда пытаетесь получить HKEY_LOCAL_MACHINE\SOFTWARE\RSA он действительно ищет HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\RSA поэтому вы получаете null

Ответ 4

просмотрите разрешения безопасности в разделе реестра с помощью regedt32.exe; проверьте, запущен ли он как администратор и выключен ли UAC. Согласно документации opensubkey, ее нужно открыть сначала, прежде чем обращаться к любым клавишам; http://msdn.microsoft.com/en-us/library/z9f66s0a.aspx

Ответ 5

У меня был дополнительный "\" в начале моего пути, убедитесь, что он установлен правильно.