2014-10-10 142 views
2

給出下面的代碼,lastuser字符串返回null,但是,如果我使用註冊表編輯器查看此密鑰它有數據與它關聯。 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 2014-10-10 12:32:23

+2

請指定您的目標CPU和您的操作系統位數。可能您是[註冊表重定向程序](http://msdn.microsoft.com/en-us/library/windows/desktop/aa384232(v = vs.85).aspx) – Steve 2014-10-10 12:34:13

+0

OS = Windows 7 Professional SP1 64位。 – user3308131 2014-10-10 12:36:15

回答

3

2可能出現的問題:

  1. 您正在嘗試讀取LoggedOnSAMUser鍵,相當多的機會,你 意味着LastLoggedOnSAMUser
  2. 您可能試圖從32位應用程序讀取64位註冊表項。如果可能,請將您的平臺目標更改爲x64並重試。如果不可能,您可能必須直接使用註冊表API。希望在正確的directon輕推:link
+0

更改爲x64平臺的確有竅門。不知道爲什麼我無法從32位應用程序讀取64位註冊表項。 – user3308131 2014-10-10 13:05:45

0

幾乎可以肯定你有一個64位機上的32位進程,因此受到registry redirection。默認情況下,您的32位進程從註冊表的32位視圖讀取。但是你想從64位視圖讀取。

請求您通過枚舉RegistryView的方式從註冊表的64位視圖中讀取,從而解決問題。

+0

我已經嘗試了32位和64位基本視圖(RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,RegistryView.Registry64);),而不返回NULL的任何更改。 – user3308131 2014-10-10 13:03:02

+0

你做錯了什麼。您不需要切換到x64。已知RegistryView'工作。 – 2014-10-10 13:19:44

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