获取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

  • 我怎样才能得到Windows最后一次重启的原因
  • 有没有办法将System.IO.Stream转换为Windows.Storage.Streams.IRandomAccessStream?
  • 什么时候System.getProperty(“java.io.tmpdir”)返回“c:\ temp”
  • 在Python中检测64位操作系统(Windows)
  • 在Windows批处理脚本中获取没有扩展名的文件名
  • 如何获得在Windows下使用C ++的内存使用情况
  • WINMAIN和main()在C ++(扩展)
  • Windows命令仅用于文件大小?
  • 如何在localhost Windows上释放我的端口80?
  • 欺骗后如何检测原始MAC地址?
  • Maven错误:无法find或加载主类org.codehaus.plexus.classworlds.launcher.Launcher