В.NET, кажется, существует несколько способов получить текущее имя пользователя Windows. Три из которых:
string name = WindowsIdentity.GetCurrent().Name;
или
string name = Thread.CurrentPrincipal.Identity.Name;
или
string name = Environment.UserName;
Каково различие, и почему выбирают один метод по другому? Есть ли какие-либо другие пути?
Environment.UserName вызывает GetUserName в advapi32.dll. Это означает, что если вы выдаете себя за другого пользователя, это свойство будет отражать это.
Thread.CurrentPrincipal имеет установщик и может быть изменен программно. (Кстати, это не олицетворение.)
WindowsIdentity - это ваш текущий идентификатор windows , если таковой имеется. Это не обязательно будет отражать пользователя, подумайте ASP.NET с FormsAuthentication. Тогда WindowsIdentity будет NT-службой, а FormsIdentity будет авторизованным пользователем. Также есть PassportIdentity, и вы можете создавать свои собственные вещи, чтобы еще больше усложнять ситуацию.
Вы просили альтернативные пути.
Конечно, вы всегда можете использовать собственный Windows API: GetUserName .
Я полагаю, что свойство было помещено в несколько мест, чтобы программисту было легче его найти. Есть только один вошедший пользователь, и только одно соответствующее имя.