2014-10-10 2 views
2

введите код ниже, строка lastuser возвращает null, однако, если я использую regedit для просмотра этого ключа, у него есть данные, связанные с ним. Является ли LoggedOnSAMuser ограниченным ключом?Не удается прочитать ключ реестра

public static string lastlogon() 
    { 
     string lastuser; 
     RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 
     RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI",false); 
     if (registryKey != null) 
     { 
      lastuser = (string) registryKey.GetValue("LastLoggedOnSAMUser"); 
     } 
     else lastuser = "Unknown User"; 
     return (lastuser); 
    } 
+0

Я не могу найти этот ключ. Я вижу только «LastLoggedOnSAMUser». Но это может быть связано с различием конфигурации между вашей машиной и моей. – CodesInChaos

+2

Укажите целевой процессор и бит вашей ОС. Вероятно, вы стали жертвой [редиректора реестра] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa384232 (v = vs.85) .aspx) – Steve

+0

OS = Windows 7 Professional, SP1 64-битный. – user3308131

ответ

3

2 возможные вопросы:

  1. Вы пытаетесь прочитать ключ LoggedOnSAMUser, вполне шанс, что вы означало LastLoggedOnSAMUser.
  2. Возможно, вы пытаетесь прочитать 64-разрядную запись реестра из 32-разрядного приложения. Если возможно, измените целевую платформу на x64 и повторите попытку. Если это невозможно, возможно, вам придется использовать API реестра напрямую. Будем надеяться, что толчок в правильном directon: link
+0

Переход на платформу x64 сделал трюк. Не знаю, почему я не смог прочитать 64-битный раздел реестра из 32-разрядного приложения. – user3308131

0

Почти наверняка у вас есть 32 битный процесс на 64 битной машине и поэтому подлежат registry redirection. Ваш 32-битный процесс по умолчанию читает из 32-битного представления реестра. Но вы хотите читать с 64-битного представления.

Решите проблему, попросив вас прочитать из 64-разрядного представления реестра, путем перечисления RegistryView.

+0

Я пробовал и 32 и 64-битные базовые представления (RegistryKey.OpenBaseKey (RegistryHive.LocalMachine, RegistryView.Registry64);) без каких-либо изменений в возвращаемом значении NULL. – user3308131

+0

Вы делаете что-то неправильно. Вам не нужно переключаться на x64. «RegistryView», как известно, работает. –

0

Это, кажется, работает на Windows 7

RegistryKey thisKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 
    RegistryKey thisSubkey = thisKey.OpenSubKey(@"SOFTWARE\\fred", false); 
    _url = (string)thisSubkey.GetValue("_url", "*"); 
    _port = (string)thisSubkey.GetValue("_port", 0); 
Смежные вопросы