Answers:
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
Environment.UserName
将返回“ RunAs”用户。
MessageBox.Show(Environment.UserName);
把这个在你的window_loaded
事件,以及使用运行方式运行它....
Domain\Username
。如何获得与用户名关联的名称?
如果您在用户网络中,则用户名将不同:
Environment.UserName
- Will Display format : 'Username'
而不是
System.Security.Principal.WindowsIdentity.GetCurrent().Name
- Will Display format : 'NetworkName\Username'
选择所需的格式。
Environment.UserDomainName + "\\" + Environment.UserName
用来获得与貌似相同的结果System.Security.Principal.WindowsIdentity.GetCurrent().Name
。现在,有什么区别,你问...我不确定。
System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
ToArray()
后添加Split
Last()
ToArray()
。但是,您将需要using System.Linq;
。
尝试使用该属性:Environment.UserName
。
string userName = Environment.UserName;
Environment.UsernName
给出登录的帐户名,但WindowsIdentity.GetCurrent().Name
返回的是应用程序运行所使用的帐户名。
Environment.UserName的文档似乎有点冲突:
在同一页面上说:
获取当前登录到Windows操作系统的人员的用户名。
和
显示启动当前线程的人员的用户名
如果使用RunAs测试Environment.UserName,它将为您提供RunAs用户帐户名,而不是最初登录Windows的用户。
我完全赞同其他答案,但我想强调另一种方法,它说
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
(在本地服务器上运行应用程序时)。
Request
仅在您是Web应用程序时有效。这是System.Web.HttpRequest
采用:
System.Security.Principal.WindowsIdentity.GetCurrent().Name
这将是登录名。
我从现有答案中尝试了几种组合,但它们给了我
DefaultAppPool
IIS APPPOOL
IIS APPPOOL\DefaultAppPool
我最终使用
string vUserName = User.Identity.Name;
这给了我实际的用户域用户名。
String myUserName = Environment.UserName
这将为您提供输出-your_user_name
使用System.Windows.Forms.SystemInformation.UserName
在用户实际记录为 Environment.UserName
仍返回正在使用的当前进程的帐户。
我尝试了所有以前的答案,但这些都不适合我,因此在MSDN上找到了答案。请参阅“ UserName4”以获取适合我的正确名称。
我使用的是登录用户,如下所示:
<asp:LoginName ID="LoginName1" runat="server" />
我写了一个小功能来尝试所有这些功能。我的结果是在每一行之后的评论中。
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;
}
调用此函数将通过返回返回已登录的用户名。
更新:我想指出的是,在本地服务器实例上运行此代码后,我看到Username4返回“”(空字符串),但是UserName3和UserName5返回登录的用户。只是要提防。
这是代码(但不在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;
}
}
获取当前的Windows用户名:
using System;
class Sample
{
public static void Main()
{
Console.WriteLine();
// <-- Keep this information secure! -->
Console.WriteLine("UserName: {0}", Environment.UserName);
}
}
对于要分发给多个用户的Windows Forms应用程序(其中许多通过vpn登录),我尝试了几种方法都可以用于本地计算机测试,而不能用于其他用户。我碰到了一篇我改编并可以工作的Microsoft文章。
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;
}
}
}
如果它对其他人有帮助,当我将一个应用程序从c#.net 3.5应用程序升级到Visual Studio 2017时,此行代码User.Identity.Name.Substring(4);
将引发此错误“ startIndex不能大于字符串的长度 ”(之前没有提示)。
当我将其更改为它时感到很高兴,System.Security.Principal.WindowsIdentity.GetCurrent().Name
但是最终我还是使用它Environment.UserName;
来获取登录的Windows用户并且没有域部分。
我在这里查看了大多数答案,但没有一个给我正确的用户名。
就我而言,我想从其他用户运行我的应用程序时获得登录的用户名,例如当按住shift键并右键单击文件并“以其他用户身份运行”时。
我尝试的答案给了我“其他”用户名。
这篇博客文章提供了一种获取登录用户名的方法,即使在我的情况下也可以使用:https :
//smbadiwe.github.io/post/track-activities-windows-service/
它使用Wtsapi
Environment.UserName
?