Tengo un servicio de Windows que necesita el nombre de usuario actualmente registrado. Intenté System.Environment.UserName
, identidad de Windows y autenticación de formulario de Windows, pero todos están devolviendo "Sistema" ya que el usuario como mi servicio se está ejecutando en el sistema con privilegios. ¿Hay alguna manera de obtener el nombre de usuario registrado actualmente sin cambiar el tipo de mi cuenta de servicio?¿Cómo obtengo el nombre de usuario actualmente registrado de un servicio de Windows en .NET?
Respuesta
Pruebe WindowsIdentity.GetCurrent()
. Es necesario añadir una referencia a System.Security.Principal
Creo que esto devolverá al usuario que el servicio se está ejecutando como, no todos usuarios interactivos como se ve desde el servicio que se ejecuta bajo una cuenta de sistema. –
Esta es una consulta WMI para obtener el nombre de usuario:
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];
Usted tendrá que añadir System.Management
bajo Referencias manualmente.
La gente sigue olvidando que las formas habituales de "obtener" un nombre de usuario no funcionan cuando se ejecuta un servicio debido a las cuentas del sistema ... +1 por ser la única respuesta para tener esto en cuenta – amartin94
Me doy cuenta de que esta pregunta es muy antigua, pero Lo encontré al buscar en Google el mismo problema. Si bien esta respuesta es correcta, tenga en cuenta que, como dijo @xanblax en su respuesta, esta consulta WMI no funcionará en una sesión remota (RDP). Solo quería señalarlo y hacerlo más visible, en caso de que alguien más lo lea en el futuro. – CodeCanuck
código Modificado de Tapas's answer:
Dim searcher As New ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem")
Dim collection As ManagementObjectCollection = searcher.[Get]()
Dim username As String
For Each oReturn As ManagementObject In collection
username = oReturn("UserName")
Next
También puede intentar
System.Environment.GetEnvironmentVariable("UserName");
¿Qué mostrará? Dominio \ Nombre de usuario o simplemente Nombre de usuario? – SearchForKnowledge
@SearchForKnowledge: Simplemente devuelve el nombre de usuario: es equivalente a usar la propiedad 'Environment.UserName' – Bhramar
ManagementObjectSearcher ("SELECT nombre de usuario de Win32_ComputerSystem") solución funcionó bien para mí. PERO no funciona si el servicio se inicia a través de una conexión de escritorio remoto. Para solucionar esto, podemos solicitar el nombre de usuario del propietario de un proceso interactivo que siempre se ejecuta en una PC: explorer.exe. De esta manera, siempre nos dan la actualidad de Windows que ha iniciado sesión en el nombre de usuario de nuestro servicio de Windows:
foreach (System.Management.ManagementObject Process in Processes.Get())
{
if (Process["ExecutablePath"] != null &&
System.IO.Path.GetFileName(Process["ExecutablePath"].ToString()).ToLower() == "explorer.exe")
{
string[] OwnerInfo = new string[2];
Process.InvokeMethod("GetOwner", (object[])OwnerInfo);
Console.WriteLine(string.Format("Windows Logged-in Interactive UserName={0}", OwnerInfo[0]));
break;
}
}
bastante inteligente :) –
Quería usar esta respuesta, pero no pude encontrar la clase Procesos. –
Si se encuentra en una red de usuarios, entonces el nombre de usuario será diferente:
Environment.UserName
mostrará formato: 'nombre de usuario', en lugar de
System.Security.Principal.WindowsIdentity.GetCurrent().Name
mostrará formato: 'NetworkName \ nombre de usuario'
Elija el formato que desee.
Sólo en caso de que alguien está buscando el usuario Mostrar nombre en contraposición a Nombre de Usuario, como yo.
Aquí está el placer:
System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName.
Agregue la referencia a System.DirectoryServices.AccountManagement
en su proyecto.
- 1. MVC3 + Cómo obtener el nombre de usuario del usuario registrado actualmente
- 2. ¿Cómo obtengo el nombre y apellido del usuario registrado de Windows?
- 3. C# .Net aplicación de Windows - Obtener el nombre de usuario registrado en Mi NT
- 4. ¿Cómo obtengo el nombre del usuario actual de Windows en formato de nombre de usuario @ dominio?
- 5. Cómo obtener la identificación del usuario actualmente registrado en pyrocms?
- 6. Cómo obtener el usuario actual de Windows registrado en MSBuild
- 7. ¿Cómo obtengo el nombre de usuario en un Makefile?
- 8. Cómo leer el nombre de usuario registrado de Windows con PHP/IIS
- 9. ¿Cómo recupero el nombre de usuario con el que se ejecuta un servicio de Windows?
- 10. ¿Cómo puedo recuperar el URI TCM del usuario registrado actualmente en código JavaScript?
- 11. ¿Cómo puedo cambiar el nombre de un servicio de Windows?
- 12. ¿Cómo obtengo el nombre completo de un usuario en la aplicación de intranet MVP 3 de .net?
- 13. ¿Cómo obtengo el nombre de usuario en Python?
- 14. Autenticación de Windows integrada que muestra el usuario registrado incorrecto
- 15. Instalar un servicio de Windows en una máquina remota usando el nombre de usuario dado
- 16. obtener el ID de usuario registrado actualmente en aspnet membresía mvc
- 17. ¿Cómo obtengo el nombre de usuario actual en .NET usando C#?
- 18. Java - ¿Cómo obtener el nombre de usuario registrado de OS (desde el dominio)?
- 19. ¿Cómo instalar un servicio de Windows desarrollado en .NET 3.5?
- 20. Propiedad de Teamcity para el usuario con sesión iniciada actualmente
- 21. ¿Cómo detener correctamente un servicio de Windows .NET multiproceso?
- 22. La mejor manera de que un servicio .Net de Windows informe un error al usuario
- 23. AZURE ACS - Windows Live ID - ¿Cómo obtengo el correo electrónico y el nombre del usuario autenticado?
- 24. Obtener el nombre de usuario registrado en la aplicación de intranet ASP.NET MVC3
- 25. Exposición de un servicio .Net
- 26. Cómo instalar un servicio de Windows .NET sin InstallUtil.exe vb.net
- 27. Obtener el nombre de la computadora en un servicio de Windows?
- 28. ¿Cómo obtener el nombre del servicio de Windows desde app.config
- 29. ¿Cómo obtengo el texto del nodo seleccionado actualmente en jstree?
- 30. django - obtener usuario registrado en el cliente de prueba
¿Sabía que puede haber más de un usuario conectado? ¿Los quieres a todos? –
http://stackoverflow.com/questions/4442488/c-net-getting-user-name-of-machine-using-windows-service y http://stackoverflow.com/questions/2727393/get-user-sid -from-logon-id-windows-xp-and-up Creo que también puede obtener los usuarios que han iniciado sesión leyendo el registro de Windows (aquellos con subclave SID). –
ya por supuesto, todo usuario registrado. –