如果帐户名已更改,则为当前用户名

时间:2013-06-27 06:40:58

标签: c# .net windows-authentication

我尝试在c#中获取当前登录用户的名称 - 而不是我在Environment.UserName中可以轻松找到的帐户名。 我想枚举MyComputer上的文件夹,就像explorer一样。我怎么能这样做,还是有另一种方法来获得用户的正确名称?

提前致谢。

3 个答案:

答案 0 :(得分:2)

尝试使用:

System.Security.Principal.WindowsIdentity.GetCurrent().Name这应该返回当前登录用户的帐户及其名称。

如果在用户名更改后不起作用,另一种方法是获取当前用户的SID,然后查找与该SID匹配的用户名。

using System.Security.Principal;
string sid = WindowsIdentity.GetCurrent().Owner.ToString();
return new SecurityIdentifier(sid).Translate(typeof(NTAccount)).ToString();

如果失败,请使用SID并尝试通过WMI或注册表找到匹配的用户。有关如何手动执行此操作的说明,请访问:http://pcsupport.about.com/od/registry/ht/find-user-security-identifier.htm

如果您可以手动确认这些方法中的任何一个返回NEW用户名,那么只需在代码中实现该用户名,即使用WMI调用或注册表访问。

答案 1 :(得分:1)

使用它,

string windowLoging = WindowsIdentity.GetCurrent().Name;

string windowsLogin = Page.User.Identity.Name;

string windowsLogin = Environment.GetEnvironmentVariable("USERNAME");

答案 2 :(得分:0)

@ damienc88 您的链接引导我找到解决方案:

    SelectQuery query = new SelectQuery("Win32_UserAccount", string.Format("Domain='{0}'", Environment.MachineName)); 
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); 
    foreach (ManagementObject mObject in searcher.Get()) 
    { 
        Console.WriteLine((string)mObject["Name"] + "\t" + (string)mObject["FullName"]); 
    } 

“FullName”是我搜索过的属性。非常感谢。 - Harald Pitro