无法读取注册表项

时间:2014-10-10 12:25:46

标签: c# null registrykey

给出下面的代码,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);
    }

3 个答案:

答案 0 :(得分:3)

2个可能的问题:

  1. 您正试图阅读LoggedOnSAMUser密钥,很有可能 意为LastLoggedOnSAMUser
  2. 您可能正在尝试从32位应用程序中读取64位注册表项。如果可能,将平台目标更改为x64并重试。如果不可能,您可能必须直接使用注册表API。希望在正确的指导下轻推:link

答案 1 :(得分:0)

几乎可以肯定,64位计算机上有32位进程,因此需要registry redirection。默认情况下,32位进程从注册表的32位视图读取。但是你想从64位视图中读取。

通过请求您通过RegistryView枚举从注册表的64位视图读取来解决问题。

答案 2 :(得分: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);