Puede usar Environment.UserDomainName + "\\" + Environment.UserNamepara obtener aparentemente el mismo resultado que System.Security.Principal.WindowsIdentity.GetCurrent().Name. Ahora, cuál es la diferencia, preguntas ... No estoy seguro.
Gutblender
99
Necesitaba que el usuario ejecutara la aplicación en lugar de quién inició sesión (Environment.UserName no es lo que quiero), así que hice lo siguiente para quitar el dominio: System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
thehelix
Debe agregar ToArray()después Splitantes de llamarLast()
codenamezero
1
@codenamezero No ToArray()se necesita. using System.Linq;Aunque lo necesitarías .
Precaución: como Simon Gillbee mencionó en los comentarios de la respuesta aceptada, Environment.UsernNameproporciona el nombre de cuenta registrado, pero WindowsIdentity.GetCurrent().Namedevuelve el nombre de cuenta con el que se ejecuta la aplicación.
Gerwald
55
@leo: Precaución: esa información también es aparentemente incorrecta, vea la respuesta de Bolu . :-)
TJ Crowder
NO lo use con ASP.NET. docs.microsoft.com dice: "Si una aplicación ASP.NET se ejecuta en un entorno de desarrollo, la propiedad UserName devuelve el nombre del usuario actual. En una aplicación ASP.NET publicada, esta propiedad devuelve el nombre de la cuenta del grupo de aplicaciones ( como el grupo de aplicaciones predeterminado) ".
feihoa
28
La documentación de Environment.UserName parece ser un poco conflictiva:
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).
Excelente. También recibí solo la identidad del grupo de aplicaciones. Pero su código resolvió mi problema. Muchas gracias.
SuryaKavitha
Parece que quería el nombre de usuario del usuario que realiza una solicitud, supongo que para un controlador MVC o API web. Es diferente al nombre de usuario con el que se ejecuta el proceso
Ben Aaronson,
@BenAaronson La pregunta no dice nada sobre qué nombre de usuario ejecuta un proceso. Necesitaba el nombre de usuario del dominio actualmente conectado y una búsqueda me trajo a esta página, este código terminó dándome lo que necesitaba.
Úselo System.Windows.Forms.SystemInformation.UserNamepara el usuario que realmente Environment.UserNameinició sesión, ya que aún devuelve la cuenta que está utilizando el proceso actual.
Intenté todas las respuestas anteriores y encontré la respuesta en MSDN después de que ninguna de estas me funcionó. Ver 'UserName4' para el correcto para mí.
Estoy detrás del usuario conectado , como lo muestra:
<asp:LoginName ID="LoginName1" runat="server"/>
Aquí hay una pequeña función que escribí para probarlos todos. Mi resultado está en los comentarios después de cada fila.
protectedstringGetLoggedInUsername(){stringUserName=System.Security.Principal.WindowsIdentity.GetCurrent().Name;// Gives NT AUTHORITY\SYSTEMStringUserName2=Request.LogonUserIdentity.Name;// Gives NT AUTHORITY\SYSTEMStringUserName3=Environment.UserName;// Gives SYSTEMstringUserName4=HttpContext.Current.User.Identity.Name;// Gives actual user logged on (as seen in <ASP:Login />)stringUserName5=System.Windows.Forms.SystemInformation.UserName;// Gives SYSTEMreturnUserName4;}
Llamar a esta función devuelve el nombre de usuario conectado por retorno.
Actualización: me gustaría señalar que ejecutar este código en mi instancia de servidor local me muestra que Username4 devuelve "" (una cadena vacía), pero UserName3 y UserName5 devuelven el usuario conectado. Solo algo de lo que tener cuidado.
Mi sitio web usa IIS, pero cuando visito la página desde otra computadora dentro de la red, sigo viendo "Servicio de red" como nombre de usuario. Intenté todas las opciones, pero no me da el usuario conectado que está viendo la página. ¿Alguna idea?
Si8
3
NOTA: No está claro, pero el ejemplo anterior se aplica en el contexto de una aplicación web que se ejecuta en IIS, donde varios de ellos mostrarán el nombre de la cuenta de Windows del servidor que ejecuta el grupo de aplicaciones ASP.Net. Si se ejecuta como un programa interactivo o servicio de Windows, el de HttpContext no estará disponible, y uno de los otros debe usarse para encontrar la cuenta bajo la cual se ejecuta el proceso.
Oskar Berggren
4
Aquí está el código (pero no en C #):
Private m_CurUser AsStringPublicReadOnlyPropertyCurrentUserAsStringGetIfString.IsNullOrEmpty(m_CurUser)ThenDim who AsSystem.Security.Principal.IIdentity=System.Security.Principal.WindowsIdentity.GetCurrent()If who IsNothingThen
m_CurUser =Environment.UserDomainName&"\" &Environment.UserNameElse
m_CurUser = who.NameEndIfEndIfReturn m_CurUser
EndGetEndProperty
Para una aplicación de Windows Forms que se distribuiría a varios usuarios, muchos de los cuales inician sesión a través de VPN, había intentado varias formas que funcionaron para mis pruebas de máquinas locales, pero no para otras. Encontré un artículo de Microsoft que adapté y funciona.
using System;
using System.Security.Principal;
namespace ManageExclusion{publicstaticclassUserIdentity{// concept borrowed from // https://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity(v=vs.110).aspxpublicstaticstringGetUser(){IntPtr accountToken =WindowsIdentity.GetCurrent().Token;WindowsIdentity windowsIdentity =newWindowsIdentity(accountToken);return windowsIdentity.Name;}}}
using System;classSample{publicstaticvoidMain(){Console.WriteLine();// <-- Keep this information secure! -->Console.WriteLine("UserName: {0}",Environment.UserName);}}
Mi sitio web usa IIS, pero cuando visito la página desde otra computadora dentro de la red, sigo viendo "Servicio de red" como nombre de usuario. Intenté todas las opciones, pero no me da el usuario conectado que está viendo la página. ¿Alguna idea?
Si8
1
En caso de que sea útil para otros, cuando actualicé una aplicación de la aplicación c # .net 3.5 a Visual Studio 2017, esta línea de código User.Identity.Name.Substring(4);arrojó este error " startIndex no puede ser mayor que la longitud de la cadena " (no se redujo antes).
Fue feliz cuando lo cambié a, System.Security.Principal.WindowsIdentity.GetCurrent().Namesin embargo, terminé usando Environment.UserName;para iniciar sesión en el usuario de Windows y sin la porción de dominio.
Revisé la mayoría de las respuestas aquí y ninguna de ellas me dio el nombre de usuario correcto.
En mi caso, quería obtener el nombre de usuario conectado, mientras ejecutaba mi aplicación desde un usuario diferente, como cuando shift + clic derecho en un archivo y "Ejecutar como un usuario diferente".
Las respuestas que probé me dieron el 'otro' nombre de usuario.
Environment.UserName
?Environment.UserName
devolverá el usuario "RunAs".MessageBox.Show(Environment.UserName);
coloque esto en suwindow_loaded
evento y ejecútelo usando RunAs ....Domain\Username
. ¿Cómo puedo obtener el nombre asociado con el nombre de usuario?Si está en una red de usuarios, el nombre de usuario será diferente:
más bien que
Elige el formato que quieras.
fuente
Environment.UserDomainName + "\\" + Environment.UserName
para obtener aparentemente el mismo resultado queSystem.Security.Principal.WindowsIdentity.GetCurrent().Name
. Ahora, cuál es la diferencia, preguntas ... No estoy seguro.System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
ToArray()
despuésSplit
antes de llamarLast()
ToArray()
se necesita.using System.Linq;
Aunque lo necesitarías .Trate de la propiedad:
Environment.UserName
.fuente
string userName = Environment.UserName;
Environment.UsernName
proporciona el nombre de cuenta registrado, peroWindowsIdentity.GetCurrent().Name
devuelve el nombre de cuenta con el que se ejecuta la aplicación.La documentación de Environment.UserName parece ser un poco conflictiva:
Propiedad Environment.UserName
En la misma página dice:
Y
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.
fuente
Apoyo totalmente las otras respuestas, pero me gustaría destacar un método más que dice
El método anterior me devolvió el nombre de usuario en el formato: DomainName \ UserName . Por ejemplo, EUROPE \ UserName
Que es diferente de:
El cual se muestra en el siguiente formato: Nombre de usuario
Y finalmente:
que dio:
NT AUTHORITY\IUSR
(mientras se ejecuta la aplicación en el servidor IIS) yDomainName\UserName
(mientras se ejecuta la aplicación en un servidor local).fuente
Request
solo funciona si es una aplicación web. Es una instancia deSystem.Web.HttpRequest
Utilizar:
Ese será el nombre de inicio de sesión.
fuente
También puede intentar usar:
Me gusta esto...:
Espero que esto haya sido de ayuda.
fuente
Intenté varias combinaciones de las respuestas existentes, pero me dieron
Terminé usando
Lo que me dio solo el nombre de usuario del dominio de los usuarios reales.
fuente
Esto le dará salida - your_user_name
fuente
Úselo
System.Windows.Forms.SystemInformation.UserName
para el usuario que realmenteEnvironment.UserName
inició sesión, ya que aún devuelve la cuenta que está utilizando el proceso actual.fuente
En caso de que alguien esté buscando el Nombre para mostrar del usuario en lugar del Nombre de usuario , como yo.
Aquí está el regalo:
Agregue referencia a
System.DirectoryServices.AccountManagement
en su proyecto.fuente
Intenté todas las respuestas anteriores y encontré la respuesta en MSDN después de que ninguna de estas me funcionó. Ver 'UserName4' para el correcto para mí.
Estoy detrás del usuario conectado , como lo muestra:
Aquí hay una pequeña función que escribí para probarlos todos. Mi resultado está en los comentarios después de cada fila.
Llamar a esta función devuelve el nombre de usuario conectado por retorno.
Actualización: me gustaría señalar que ejecutar este código en mi instancia de servidor local me muestra que Username4 devuelve "" (una cadena vacía), pero UserName3 y UserName5 devuelven el usuario conectado. Solo algo de lo que tener cuidado.
fuente
Aquí está el código (pero no en C #):
Aquí está el código (ahora también en C #):
fuente
prueba esto
ahora se ve mejor
fuente
Para una aplicación de Windows Forms que se distribuiría a varios usuarios, muchos de los cuales inician sesión a través de VPN, había intentado varias formas que funcionaron para mis pruebas de máquinas locales, pero no para otras. Encontré un artículo de Microsoft que adapté y funciona.
fuente
Obtenga el nombre de usuario actual de Windows:
fuente
En caso de que sea útil para otros, cuando actualicé una aplicación de la aplicación c # .net 3.5 a Visual Studio 2017, esta línea de código
User.Identity.Name.Substring(4);
arrojó este error " startIndex no puede ser mayor que la longitud de la cadena " (no se redujo antes).Fue feliz cuando lo cambié a,
System.Security.Principal.WindowsIdentity.GetCurrent().Name
sin embargo, terminé usandoEnvironment.UserName;
para iniciar sesión en el usuario de Windows y sin la porción de dominio.fuente
Revisé la mayoría de las respuestas aquí y ninguna de ellas me dio el nombre de usuario correcto.
En mi caso, quería obtener el nombre de usuario conectado, mientras ejecutaba mi aplicación desde un usuario diferente, como cuando shift + clic derecho en un archivo y "Ejecutar como un usuario diferente".
Las respuestas que probé me dieron el 'otro' nombre de usuario.
Esta publicación de blog proporciona una forma de obtener el nombre de usuario registrado, que funciona incluso en mi escenario:
https://smbadiwe.github.io/post/track-activities-windows-service/
Utiliza Wtsapi
fuente