Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';不读取注册表项_C#_Null_Registrykey - Fatal编程技术网

C# Can';不读取注册表项

C# Can';不读取注册表项,c#,null,registrykey,C#,Null,Registrykey,给出下面的代码,lastuser string返回null,但是,如果我使用regedit查看这个键,它就有与之关联的数据。LoggedOnSAMuser是受限密钥吗 public static string lastlogon() { string lastuser; RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); RegistryK

给出下面的代码,lastuser string返回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);
    }
2可能的问题:

  • 您正在尝试读取
    LoggedOnSAMUser
    键,很有可能 意思是
    LastLoggedOnSAMUser
  • 您可能正在尝试从32位应用程序读取64位注册表项。如果可能,请将平台目标更改为x64,然后重试。如果不可能,您可能必须直接使用注册表API。希望在正确的方向上轻推:

  • 几乎可以肯定的是,您在64位机器上有一个32位进程,因此您必须遵守。默认情况下,32位进程从注册表的32位视图中读取。但您希望从64位视图中读取


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

    这似乎在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);
    

    我找不到那把钥匙。我只看到
    LastLoggedOnSAMUser
    。但这可能是由于您的机器和我的机器之间的配置不同。请指定您的目标CPU和操作系统位。可能你是OS=Windows7 Professional,SP1 64位的受害者。我还想指出,你应该寻找一个合适的API,它可以返回你想要的。直接访问内部windows注册表项通常不是一个好主意。例如,提到了
    GetUserName
    GetUserNameEx
    。我发现:当LoggedOnSAMUser不存在时,它可能有助于您找到解决方案。我尝试了32位和64位基本视图(RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,RegistryView.Registry64);)返回的NULL值没有任何变化。您做错了什么。您不需要切换到x64
    RegistryView
    已知是有效的。改用x64平台就成功了。不确定为什么我无法从32位应用程序中读取64位注册表项。