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.
Pruebe la propiedad: Environment.UserName
.
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;