Получите имя пользователя Windows - различные методы

В.NET, кажется, существует несколько способов получить текущее имя пользователя Windows. Три из которых:

string name = WindowsIdentity.GetCurrent().Name;

или

string name = Thread.CurrentPrincipal.Identity.Name;

или

string name = Environment.UserName;

Каково различие, и почему выбирают один метод по другому? Есть ли какие-либо другие пути?

37
задан Andy 5 August 2011 в 16:28
поделиться

3 ответа

Environment.UserName вызывает GetUserName в advapi32.dll. Это означает, что если вы выдаете себя за другого пользователя, это свойство будет отражать это.

Thread.CurrentPrincipal имеет установщик и может быть изменен программно. (Кстати, это не олицетворение.)

WindowsIdentity - это ваш текущий идентификатор windows , если таковой имеется. Это не обязательно будет отражать пользователя, подумайте ASP.NET с FormsAuthentication. Тогда WindowsIdentity будет NT-службой, а FormsIdentity будет авторизованным пользователем. Также есть PassportIdentity, и вы можете создавать свои собственные вещи, чтобы еще больше усложнять ситуацию.

32
ответ дан 27 November 2019 в 05:01
поделиться

Вы просили альтернативные пути.

Конечно, вы всегда можете использовать собственный Windows API: GetUserName .

1
ответ дан 27 November 2019 в 05:01
поделиться

Я полагаю, что свойство было помещено в несколько мест, чтобы программисту было легче его найти. Есть только один вошедший пользователь, и только одно соответствующее имя.

0
ответ дан 27 November 2019 в 05:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: