代码之家  ›  专栏  ›  技术社区  ›  Andy

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

  •  36
  • Andy  · 技术社区  · 14 年前

    string name = WindowsIdentity.GetCurrent().Name;
    

    string name = Thread.CurrentPrincipal.Identity.Name;
    

    string name = Environment.UserName;
    

    有什么区别,为什么选择一种方法而不是另一种?还有别的办法吗?

    4 回复  |  直到 3 年前
        1
  •  32
  •   sisve    14 年前

    Environment.UserName调用advapi32.dll中的GetUserName。这意味着,如果您正在模拟另一个用户,此属性将反映这一点。

    Thread.CurrentPrincipal有一个setter,可以通过编程进行更改(这不是冒充。)

    WindowsIdentity是您当前的 身份,如果有的话。它不一定会反映用户,想想ASP.NET和FormsAuthentication。然后WindowsIdentity将是NT服务,而FormsIdentity将是登录的用户。还有一个护照身份,你可以建立自己的东西,使事情更加复杂。

        2
  •  1
  •   Andreas Rejbrand    14 年前

    你要求其他的方法。

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

        3
  •  0
  •   Pavel Radzivilovsky    14 年前

    我相信这个属性放在几个地方,这样程序员就更容易找到了。只有一个登录的用户,并且只有一个相应的名称。

        4
  •  0
  •   Oskar Berggren    11 年前

    这三种方法描述如下:

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

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

    http://msdn.microsoft.com/en-us/library/aa302377.aspx