如何在.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); } }