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

时间:2014-06-23 10:58:22

标签: vb.net visual-studio-2010 visual-studio

我试图获取当前用户的用户名。当我以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

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

4 个答案:

答案 0 :(得分:7)

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

Before .NET 3

  

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

Starting from version 3

  

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

答案 1 :(得分:2)

我已经弄清楚了。我使用了这个函数来确定用户正在使用哪个进程。在我的代码中,我定义了查找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

索引将返回用户的域名

答案 2 :(得分:0)

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

怎么样:

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

在VS2017测试

答案 3 :(得分:0)

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