typeparam example cref c# .net

example - ¿Cómo obtengo el nombre de usuario actual en.NET usando C#?



summary example c# (16)

Aquí está el código (pero no en C #):

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

Aquí está el código (ahora también en C #):

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; } }

¿Cómo obtengo el nombre de usuario actual en .NET usando C #?


En caso de que alguien busque un Nombre para mostrar del usuario en lugar de un Nombre de usuario , como yo.

Aquí está el tratamiento:

System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName

Agregue una referencia a System.DirectoryServices.AccountManagement en su proyecto.


En caso de que sea útil para otros, cuando actualicé una aplicación de c # .net 3.5 a Visual Studio 2017 esta línea de código User.Identity.Name.Substring(4); lanzó este error " startIndex no puede ser mayor que la longitud de la cadena " (no se bloqueó antes).

Fue feliz cuando lo cambié a System.Security.Principal.WindowsIdentity.GetCurrent().Name sin embargo, terminé utilizando Environment.UserName; para obtener el usuario registrado en Windows y sin la porción de dominio.


La documentación para Environment.UserName parece ser un poco conflictiva:

Propiedad Environment.UserName

En la misma página dice:

Obtiene el nombre de usuario de la persona que ha iniciado sesión en el sistema operativo Windows.

Y

muestra el nombre de usuario de la persona que inició el hilo actual

Si prueba Environment.UserName usando RunAs, le dará el nombre de cuenta de usuario RunAs, no el usuario que inició sesión originalmente en Windows.


Obtenga el nombre de usuario actual de Windows:

using System; class Sample { public static void Main() { Console.WriteLine(); // <-- Keep this information secure! --> Console.WriteLine("UserName: {0}", Environment.UserName); } }


Para una aplicación de Windows Forms que iba a ser distribuida a varios usuarios, muchos de los cuales se registraron a través de vpn, probé varias formas que funcionaron para las pruebas de mi máquina local pero no para otras. Me encontré con un artículo de Microsoft que adapté y que funciona.

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; } } }


Probé todas las respuestas anteriores y encontré la respuesta en MSDN después de que ninguna de estas funcionara para mí. Ver ''UserName4'' para el correcto para mí.

Estoy después del usuario registrado , como se muestra por:

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

Aquí hay una pequeña función que escribí para probarlas todas. Mi resultado está en los comentarios después de cada fila.

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; }

Al llamar a esta función, se devuelve el nombre de usuario registrado por devolución.

Actualización: me gustaría señalar que la ejecución de este código en mi instancia del servidor local me muestra que Username4 devuelve "" (una cadena vacía), pero UserName3 y UserName5 devuelven el usuario registrado. Solo algo de lo que tengas cuidado.


Probé varias combinaciones de respuestas existentes, pero me estaban dando

DefaultAppPool IIS APPPOOL IIS APPPOOL/DefaultAppPool

Terminé usando

string vUserName = User.Identity.Name;

Lo que me dio el nombre de usuario de dominio de los usuarios solamente.



Respaldo totalmente las otras respuestas, pero me gustaría resaltar un método más que dice

String UserName = Request.LogonUserIdentity.Name;

El método anterior me devolvió el nombre de usuario en el formato: DomainName / UserName . Por ejemplo, EUROPE / UserName

Que es diferente de:

String UserName = Environment.UserName;

Que se muestra en el formato: Nombre de usuario

Y finalmente:

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

que dio: NT AUTHORITY/IUSR (mientras se ejecuta la aplicación en el servidor IIS) y DomainName/UserName (mientras se ejecuta la aplicación en un servidor local).


Si está en una red de usuarios, el nombre de usuario será diferente:

Environment.UserName - Will Display format : ''Username''

más bien que

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

Elija el formato que desee.


También puede intentar usar:

Environment.UserName;

Me gusta esto...:

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

Espero que esto haya sido de ayuda.


Use System.Windows.Forms.SystemInformation.UserName para el usuario realmente registrado como Environment.UserName aún devuelve la cuenta que está utilizando el proceso actual.


Utilizar:

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

Ese será el nombre de inicio de sesión.


prueba esto

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

ahora se ve mejor


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