Как получить текущее имя пользователя в .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'
Выберите нужный формат.
Ответ 3
Попробуйте свойство: Environment.UserName
.
Ответ 4
Документация для 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 и без домена.