获取Windows用户名 – 不同的方法

在.NET中,似乎有几种获取当前Windows用户名的方法。 其中三个是:

string name = WindowsIdentity.GetCurrent().Name; 

要么

 string name = Thread.CurrentPrincipal.Identity.Name; 

要么

 string name = Environment.UserName; 

有什么区别,为什么select一种方法呢? 还有其他的方法吗?

4 Solutions collect form web for “获取Windows用户名 – 不同的方法”

Environment.UserName在advapi32.dll中调用GetUserName。 这意味着如果你冒充另一个用户,这个属性会反映出来。

Thread.CurrentPrincipal有一个setter,可以通过编程来改变。 (这不是模仿btw。)

WindowsIdentity是您当前的Windows身份,如果有的话。 它不一定会反映用户,认为ASP.NET与FormsAuthentication。 然后WindowsIdentity将是NT服务,但FormsIdentity将是login用户。 还有一个PassportIdentity,你可以build立你自己的东西,使事情进一步复杂化。

你要求另外的方法。

当然,您始终可以使用本机Windows API: GetUserName 。

我相信这个地产被放在了几个地方,这样程序员就可以更容易find。 只有一个login用户,并且只有一个相应的名称。

三种方法描述如下:

HttpContext = HttpContext.Current.User,它返回一个IPrincipal对象,它包含当前Web请求的安全信息。 这是经过身份validation的Web客户端。

WindowsIdentity = WindowsIdentity.GetCurrent(),它返回当前正在执行的Win32线程的安全上下文的标识。

Thread = Thread.CurrentPrincipal,它返回当前正在执行的.NET线程的主体,该线程位于Win32线程之上。

它们的结果取决于您的IISconfiguration,如本文所述: http : //msdn.microsoft.com/zh-cn/library/aa302377.aspx

  • 错误:无法findvcvarsall.bat
  • Git状态需要很长时间才能完成
  • “NODE_ENV”不被识别为内部或外部命令,可操作命令或batch file
  • 如何在Windows启动时以pipe理员身份自动运行程序?
  • 如何通过命令行启动Windows调度程序?
  • 如何提高超出操作系统限制的密钥重复率?
  • WPF的Windows 7主题?
  • 如何从主机外部(同一networking)连接到docker集装箱
  • 最好的C + + IDE或Windows编辑器
  • 为什么我的文件path中出现Unicode转义的SyntaxError?
  • batch file来检查64位或32位操作系统