繁体   English   中英

在C#中获取用户登录名

[英]Get user login name in C#

如何在C#中从系统检查登录用户名我尝试使用此方法

static string whoisLoggedIn(string HostOrIP)
{
     GUFlag = true;
     HostOrIP = Environment.MachineName;
     System.Management.ConnectionOptions myConnectionOptions = new System.Management.ConnectionOptions();
     myConnectionOptions.Impersonation = System.Management.ImpersonationLevel.Impersonate;

     System.Management.ManagementScope objwmiservice;
     System.Management.ManagementObjectSearcher myObjectSearcher2;
     System.Management.ManagementObjectCollection myCollection2;

     try
     {
         objwmiservice = new System.Management.ManagementScope(("\\\\" + (HostOrIP +
"\\root\\cimv2")), myConnectionOptions);
         objwmiservice.Connect();
         myObjectSearcher2 = new System.Management.ManagementObjectSearcher(objwmiservice.Path.ToString(),
"Select UserName from Win32_ComputerSystem");
         myObjectSearcher2.Options.Timeout = new TimeSpan(0, 0, 0, 0, 7000);
         myCollection2 = myObjectSearcher2.Get();
         GUFlag = false;

         foreach (System.Management.ManagementObject myObject in myCollection2)
         {
             if (!(myObject.GetPropertyValue("Username") == null))
             {
                 string Userx = myObject.GetPropertyValue("Username").ToString();
                 int posx = Userx.LastIndexOf("\\");
                 if ((posx > 0))
                 {
                     Userx = Userx.Substring((posx + 1));
                     return Userx.ToUpper();
                 }
             }
         }
         return "<Nobody>";
     }
     catch (Exception)
     {
         return "<Nobody>";
     }
     finally {

         GUFlag = false;
     }

 }

但是问题是myObjectSearcher2.Get();上发生了一些死锁myObjectSearcher2.Get(); 有什么方法可以获取登录用户名

你尝试过吗?

Environment.UserName

它将为您提供当前在Windows上登录的用户的用户名

编辑

我在这里http://www.debugging.com/bug/20243找到了这段代码,它可以解决您的问题。

使用WMI解决方案( http://msdn.microsoft.com/zh-cn/library/system.management.aspx ):

    private string GetUserName()
    {
        string result = "";
        using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName, Name FROM Win32_ComputerSystem"))
        {
            foreach (ManagementObject mo in searcher.Get())
            {
                if (mo["UserName"] != null)
                    result = mo["UserName"].ToString();
                if (mo["Name"] != null)
                    result += " (" + mo["Name"].ToString() + ")";
            }
        }
        return result;
    }

除非我对您的理解不正确,否则我相信这只是:

using System.Security.Principal;

this.nametext = WindowsIdentity.GetCurrent().Name;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM