如何在.NET中使用C#获取当前用户名?

如何在.NET中使用C#获取当前用户名?

string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 

如果你在一个用户的networking,那么用户名将是不同的:

 Environment.UserName - Will Display format : 'Username' 

而不是

 System.Security.Principal.WindowsIdentity.GetCurrent().Name - Will Display format : 'NetworkName\Username' 

select你想要的格式。

尝试属性: Environment.UserName

我完全第二个其他的答案,但我想突出一个方法说

 String UserName = Request.LogonUserIdentity.Name; 

上面的方法返回给我的用户名格式: DomainName \ UserName 。 例如,EUROPE \ UserName

与以下不同:

 String UserName = Environment.UserName; 

其中显示的格式为: UserName

最后:

 String UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 

它给: NT AUTHORITY\IUSR (当在IIS服务器上运行应用程序时)和DomainName\UserName (当在本地服务器上运行应用程序时)。

使用:

 System.Security.Principal.WindowsIdentity.GetCurrent().Name 

这将是login名称。

Environment.UserName的文档似乎有点矛盾:

Environment.UserName属性

在同一页上它说:

获取当前login到Windows操作系统的用户的用户名。

显示启动当前线程的用户的用户名

如果使用RunAstestingEnvironment.UserName,它将为您提供RunAs用户帐户名称,而不是最初login到Windows的用户。

你也可以尝试使用:

 Environment.UserName; 

喜欢这个…:

 string j = "Your WindowsXP Account Name is: " + Environment.UserName; 

希望这有帮助。

我尝试了几个现有答案的组合,但是他们给了我

 DefaultAppPool IIS APPPOOL IIS APPPOOL\DefaultAppPool 

我结束了使用

 string vUserName = User.Identity.Name; 

哪个给了我实际的用户域用户名只。

对于实际login的用户使用System.Windows.Forms.SystemInformation.UserName作为Environment.UserName仍然返回当前进程正在使用的帐户。

这里是代码(但不是在C#中):

 Private m_CurUser As String Public ReadOnly Property CurrentUser As String Get If String.IsNullOrEmpty(m_CurUser) Then Dim who As System.Security.Principal.IIdentity = System.Security.Principal.WindowsIdentity.GetCurrent() If who Is Nothing Then m_CurUser = Environment.UserDomainName & "\" & Environment.UserName Else m_CurUser = who.Name End If End If Return m_CurUser End Get End Property 

这里是代码(现在也在C#中):

 private string m_CurUser; public string CurrentUser { get { if(string.IsNullOrEmpty(m_CurUser)) { var who = System.Security.Principal.WindowsIdentity.GetCurrent(); if (who == null) m_CurUser = System.Environment.UserDomainName + @"\" + System.Environment.UserName; else m_CurUser = who.Name; } return m_CurUser; } } 

我已经尝试了所有以前的答案,并find了MSDN上的答案后,没有一个为我工作。 请参阅“UserName4”为我正确的一个。

我在login用户之后 ,如下所示:

 <asp:LoginName ID="LoginName1" runat="server" /> 

这是我写的一个小function,可以全部尝试。 我的结果是在每行之后的评论中。

 protected string GetLoggedInUsername() { string UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; // Gives NT AUTHORITY\SYSTEM String UserName2 = Request.LogonUserIdentity.Name; // Gives NT AUTHORITY\SYSTEM String UserName3 = Environment.UserName; // Gives SYSTEM string UserName4 = HttpContext.Current.User.Identity.Name; // Gives actual user logged on (as seen in <ASP:Login />) string UserName5 = System.Windows.Forms.SystemInformation.UserName; // Gives SYSTEM return UserName4; } 

调用这个函数返回login的用户名。

更新:我想指出,在我的本地服务器实例上运行此代码显示,我的用户名4返回“”(空string),但用户名3和用户名5返回login用户。 只是要提防的东西。

对于要分发给几个用户的Windows Forms应用程序,其中许多用户通过vpnlogin,我尝试了几种方法,这些方法都适用于本地机器testing,但不适用于其他人。 我遇到了一个我修改和运行的微软文章。

 using System; using System.Security.Principal; namespace ManageExclusion { public static class UserIdentity { // concept borrowed from // https://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity(v=vs.110).aspx public static string GetUser() { IntPtr accountToken = WindowsIdentity.GetCurrent().Token; WindowsIdentity windowsIdentity = new WindowsIdentity(accountToken); return windowsIdentity.Name; } } } 

获取当前的Windows用户名:

 using System; class Sample { public static void Main() { Console.WriteLine(); // <-- Keep this information secure! --> Console.WriteLine("UserName: {0}", Environment.UserName); } }