C# Can';不读取注册表项
给出下面的代码,lastuser string返回null,但是,如果我使用regedit查看这个键,它就有与之关联的数据。LoggedOnSAMuser是受限密钥吗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
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
几乎可以肯定的是,您在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值没有任何变化。您做错了什么。您不需要切换到x64RegistryView
已知是有效的。改用x64平台就成功了。不确定为什么我无法从32位应用程序中读取64位注册表项。