繁体   English   中英

使用 VB.NET 查找当前登录用户的用户名

[英]Finding user name of current logged in user using VB.NET

我正在尝试获取当前用户的用户名。 当我以Johnny Smith身份登录并在没有管理员权限的情况下运行我的应用程序时,它将返回正确的用户名Johnny Smith 但问题是,当我右键单击并选择“以管理员身份运行”时,Windows 将提示我使用管理员登录屏幕,登录后我的应用程序返回用户名admin ,而不是当前登录的用户。

我努力了:

strUserLabel.Text = Environment.UserName

Dim WSHNetwork = CreateObject("WScript.Network")
Dim strUser = ""

While strUser = ""
    strUser = WSHNetwork.Username
End While

strUserLabel.Text = strUser

当以管理员身份提示时,两者都会返回管理员用户名。

在MSDN文档中,我发现他们更改了属性Environment.UserName的定义。

在.NET 3之前

获取启动当前线程的人员的用户名。

从版本3开始

获取当前登录到Windows操作系统的人员的用户名

我已经弄清楚了。 我使用了这个函数来确定用户正在使用哪个进程。 在我的代码中,我定义了查找explorer.exe进程的用户名。

Function GetUserName() As String

    Dim selectQuery As Management.SelectQuery = New Management.SelectQuery("Win32_Process")
    Dim searcher As Management.ManagementObjectSearcher = New Management.ManagementObjectSearcher(selectQuery)
    Dim y As System.Management.ManagementObjectCollection
    y = searcher.Get

    For Each proc As Management.ManagementObject In y
        Dim s(1) As String
        proc.InvokeMethod("GetOwner", CType(s, Object()))
        Dim n As String = proc("Name").ToString()
        If n = "explorer.exe" Then
            Return s(0)
        End If
    Next
End Function

索引 0将返回用户名

索引 1将返回用户的域名

我认为上面接受的答案是一种非常资源密集的方式来查找用户名。 它有几百个项目的嵌套循环。 在我的8GP RAM PC中,这需要2秒多!

怎么样:

  • 用户名: SystemInformation.Username ,和
  • DomainName: Environment.UserDomainName

在VS2017中测试过

SystemInformation.Username不适用于某些应用程序。 就我而言,代码正在以System身份运行,但explorer.exe正在以Daniel身份运行。 SystemInformation.Username报告系统。

如果使用 Identity Dim UserEmail As String = Context.User.Identity.Name.ToString

暂无
暂无

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

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