.NET中,似乎有多种方法可以获取当前Windows用户名。其中三种方法是:
string name = WindowsIdentity.GetCurrent().Name;
或者string name = Thread.CurrentPrincipal.Identity.Name;
或者string name = Environment.UserName;
这两种方法有什么区别,为什么要选择其中一种?还有其他的方法吗?
.NET中,似乎有多种方法可以获取当前Windows用户名。其中三种方法是:
string name = WindowsIdentity.GetCurrent().Name;
或者string name = Thread.CurrentPrincipal.Identity.Name;
或者string name = Environment.UserName;
这两种方法有什么区别,为什么要选择其中一种?还有其他的方法吗?
Environment.UserName 调用 advapi32.dll 中的 GetUserName。这意味着如果你正在模拟另一个用户,这个属性将反映出来。
Thread.CurrentPrincipal 有一个 setter 并且可以通过编程方式更改。(顺便说一下,这不是模拟身份。)
WindowsIdentity 是当前的 windows 身份(如果有)。它不一定反映出用户信息,比如 ASP.NET 使用 FormsAuthentication。在这种情况下,WindowsIdentity 将是 NT-service,而 FormsIdentity 将是已登录的用户。还有 PassportIdentity,你也可以构建自己的组件来进一步复杂化事情。
我相信该属性被放置在多个位置,以便程序员更容易找到。只有一个登录用户和一个相应的名称。
System.Threading.Thread.CurrentPrincipal.Identity.Name
是什么情况? - marc_s