获取Windows用户显示名称

40
我如何获取已登录用户的显示名称?不是用户名,而是显示名称,例如下面的屏幕截图中所示 - 以及在任何Windows Vista / 7计算机的开始菜单中看到的内容。

输入图像描述

我尝试了其他问题中提出的很多不同建议,但它们都显示用户名,而不是显示名称。 您可以在上面的屏幕截图中看到这些尝试的结果。
Imports System.Security.Principal
Imports System.Threading
Imports System.IO
Imports System

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        MsgBox("1: " & System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString & vbCrLf & _
               "2: " & Environment.UserDomainName & vbCrLf & _
               "3: " & WindowsIdentity.GetCurrent().Name & vbCrLf & _
                "4: " & Thread.CurrentPrincipal.Identity.Name & vbCrLf & _
               "5: " & Environment.UserName & vbCrLf & _
               "6: " & My.User.Name & vbCrLf &
                "7: " & My.Computer.Name)

    End Sub

End Class

1
这里 Environment.UserName 运行良好。 - Luc Morin
1
@Codemunkeee 为什么答案不是你想要的?它输出的结果不正确吗? - Asad Saeeduddin
1
如果您的应用程序在另一个用户下运行,则会获取该其他用户的用户名。 - Pierre-Alain Vigeant
1
我为提问者编辑了问题。这样好些了吗? - Tim
2
可能是重复的问题:如何获取当前登录用户的AD显示名称 - Shell
显示剩余17条评论
3个回答

69
你应该使用 UserPrincipal.DisplayName
System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName
为此,您需要将System.DirectoryServices.AccountManagement.dll添加到项目中,并引用它。
注意:当机器未连接到网络或域服务器无法访问时,此方法不起作用。

9
我使用了这种方法,但在现实世界中,我发现UserPrincipal.Current的getter会抛出PrincipalServerDownException异常。我认为情况是当当前用户使用域帐户登录时,无法联系到目录服务器,比如笔记本电脑已经从网络中断开连接时。请谨慎使用此方法,它似乎不太可靠! - Roger Sanders
1
Roger Sanders是正确的,使用这个变量要小心。在我的情况下,网络延迟很长,所以这种方法会挂起一段时间。 - Lumo
1
Unable to cast object of type 'System.DirectoryServices.AccountManagement.GroupPrincipal' to type 'System.DirectoryServices.AccountManagement.UserPrincipal'. - AgentFire

-3

4
在描述问题时,仅仅说“它不起作用”是没有意义的。为了获得帮助,您必须告诉我们出了什么问题。是否看到任何异常?如果是,那么是什么异常?结果是否出乎意料?如果是,为什么会这样? - Asad Saeeduddin
您可以参考我上面的问题。正如您所看到的,它返回了不同的输出,我将再次编辑代码以列出我所做的所有事情。 - Codemunkeee
@Codemunkeee,你能否尝试上面的代码并粘贴一下控制台输出结果? - Dexters
还是一样的,兄弟 :( - Codemunkeee
好的..等等..我还在编辑代码和使用过的所有工具 - Codemunkeee
我已经编辑了我的问题,你可以在那里看到我所做的所有事情。 - Codemunkeee

-4

这个内容位于 System.DirectoryServices 命名空间中,因此您需要在 using 部分中添加它。

然后,您可以使用 System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName 来返回 显示名称。通常在开始菜单中显示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接