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]()
Любые идеи?
Ответы
Ответ 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
У меня был дополнительный "\" в начале моего пути, убедитесь, что он установлен правильно.