2014-10-10 132 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);