Как получить текущее имя пользователя в .NET с помощью С#?

Как получить текущее имя пользователя в .NET с помощью С#?

Ответ 1

string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

Ответ 2

Если вы находитесь в сети пользователей, то имя пользователя будет другим:

Environment.UserName
- Will Display format : 'Username'

а не

System.Security.Principal.WindowsIdentity.GetCurrent().Name
- Will Display format : 'NetworkName\Username'

Выберите нужный формат.

Ответ 4

Документация для Environment.UserName кажется немного противоречивой:

Свойство Environment.UserName

На той же странице говорится:

Получает имя пользователя, которое в настоящее время зарегистрировано в операционной системе Windows.

А ТАКЖЕ

отображает имя пользователя, который начал текущий поток

Если вы протестируете Environment.UserName с помощью RunAs, он предоставит вам имя учетной записи RunAs, а не пользователь, изначально войдивший в Windows.

Ответ 5

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

String UserName = Request.LogonUserIdentity.Name;

Вышеуказанный метод вернул мне имя пользователя в формате: имя_домена\имя_пользователя. Например, EUROPE\UserName

Что отличается от:

String UserName = Environment.UserName;

Что отображается в формате: Имя пользователя

И наконец:

String UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

который дал: NT AUTHORITY\IUSR (при запуске приложения на сервере IIS) и DomainName\UserName (при запуске приложения на локальном сервере).

Ответ 6

Использование:

System.Security.Principal.WindowsIdentity.GetCurrent().Name

Это будет имя входа.

Ответ 7

Вы также можете попробовать:

Environment.UserName;

Как это...:

string j = "Your WindowsXP Account Name is: " + Environment.UserName;

Надеюсь, что это было полезно.

Ответ 8

Я попробовал несколько комбинаций из существующих ответов, но они давали мне

DefaultAppPool
IIS APPPOOL
IIS APPPOOL\DefaultAppPool

В итоге я использовал

string vUserName = User.Identity.Name;

Это дало мне только фактическое имя пользователя домена.

Ответ 9

Используйте System.Windows.Forms.SystemInformation.UserName для фактически зарегистрированного пользователя, так как Environment.UserName все еще возвращает учетную запись, используемую текущим процессом.

Ответ 10

Я пробовал все предыдущие ответы и нашел ответ на MSDN после того, как никто из них не работал у меня. См. "UserName4" для правильного для меня.

Я после входа в систему, как показано на:

<asp:LoginName ID="LoginName1" runat="server" />

Вот небольшая функция, которую я написал, чтобы попробовать их всех. Мой результат в комментариях после каждой строки.

protected string GetLoggedInUsername()
{
    string UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; // Gives NT AUTHORITY\SYSTEM
    String UserName2 = Request.LogonUserIdentity.Name; // Gives NT AUTHORITY\SYSTEM
    String UserName3 = Environment.UserName; // Gives SYSTEM
    string UserName4 = HttpContext.Current.User.Identity.Name; // Gives actual user logged on (as seen in <ASP:Login />)
    string UserName5 = System.Windows.Forms.SystemInformation.UserName; // Gives SYSTEM
    return UserName4;
}

Вызов этой функции возвращает зарегистрированное имя пользователя по возврату.

Обновление: я хотел бы указать, что запуск этого кода на моем экземпляре локального сервера показывает мне, что Username4 возвращает "" (пустую строку), но UserName3 и UserName5 возвращают зарегистрированный пользователь. Просто остерегайтесь.

Ответ 11

String myUserName = Environment.UserName

Это даст вам вывод - ваше_имя_пользователя

Ответ 12

Только в случае, если кто - то ищет пользователя Отображаемое имя, в отличие от имени пользователя, как я.

Здесь лечить:

System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName

Добавьте ссылку на System.DirectoryServices.AccountManagement в свой проект.

Ответ 13

Вот код (но не на С#):

Private m_CurUser As String

Public ReadOnly Property CurrentUser As String
    Get
        If String.IsNullOrEmpty(m_CurUser) Then
            Dim who As System.Security.Principal.IIdentity = System.Security.Principal.WindowsIdentity.GetCurrent()

            If who Is Nothing Then
                m_CurUser = Environment.UserDomainName & "\" & Environment.UserName
            Else
                m_CurUser = who.Name
            End If
        End If
        Return m_CurUser
    End Get
End Property

Вот код (теперь также в С#):

private string m_CurUser;

public string CurrentUser
{
    get
    {
        if(string.IsNullOrEmpty(m_CurUser))
        {
            var who = System.Security.Principal.WindowsIdentity.GetCurrent();
            if (who == null)
                m_CurUser = System.Environment.UserDomainName + @"\" + System.Environment.UserName;
            else
                m_CurUser = who.Name;
        }
        return m_CurUser;
    }
}

Ответ 14

попробуй это

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];

теперь он выглядит лучше

Ответ 15

Для приложения Windows Forms, которое должно было быть распространено среди нескольких пользователей, многие из которых подключились к vpn, я пробовал несколько способов, которые все работали для моего локального тестирования машины, но не для других. Я наткнулся на статью Microsoft, которую я адаптировал и работает.

using System;
using System.Security.Principal;

namespace ManageExclusion
{
    public static class UserIdentity

    {
        // concept borrowed from 
        // https://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity(v=vs.110).aspx

        public static string GetUser()
        {
            IntPtr accountToken = WindowsIdentity.GetCurrent().Token;
            WindowsIdentity windowsIdentity = new WindowsIdentity(accountToken);
            return windowsIdentity.Name;
        }
    }
}

Ответ 16

Получить текущее имя пользователя Windows:

using System;

class Sample
{
    public static void Main()
    {
        Console.WriteLine();

        //  <-- Keep this information secure! -->
        Console.WriteLine("UserName: {0}", Environment.UserName);
    }
}

Ответ 17

В случае, если это полезно для других, когда я обновил приложение из приложения С#.net 3.5 в Visual Studio 2017, эта строка кода User.Identity.Name.Substring(4); бросила эту ошибку "startIndex не может быть больше длины строки" (раньше он не баловал).

Он был счастлив, когда я сменил его на System.Security.Principal.WindowsIdentity.GetCurrent().Name менее, я закончил использование Environment.UserName; чтобы получить зарегистрированный пользователь Windows и без домена.