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

Mar*_*CIK 7 vb.net visual-studio-2010 visual-studio

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

我试过了:

strUserLabel.Text = Environment.UserName
Run Code Online (Sandbox Code Playgroud)

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

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

strUserLabel.Text = strUser
Run Code Online (Sandbox Code Playgroud)

当提示为管理员时,两者都返回管理员用户名.

dov*_*vid 7

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

在.NET 3之前

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

从版本3开始

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

  • @hector - 你做不到.如果右键单击并以管理员身份运行,则整个过程从一开始就会提升,并在另一个用户下运行 (4认同)

Han*_*mbo 7

我认为上面接受的答案是一种非常消耗资源的查找用户名的方法。它具有包含数百个项目的嵌套循环。在我的 8GP RAM PC 中,这需要 2 秒以上!

怎么样:

  • 用户名:SystemInformation.Username、 和
  • 域名:Environment.UserDomainName

在VS2017中测试


Mar*_*CIK 4

我已经想通了。我使用这个函数来确定用户正在使用哪个进程。在我的代码中,我定义了查找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
Run Code Online (Sandbox Code Playgroud)

索引0将返回用户

索引1将返回用户域名