visual studio servicios servicio instalar instalador ejemplos ejecutar crear como c# visual-studio-2010 windows-services

servicios - instalar servicio windows c# visual studio 2017



¿Cómo obtengo el nombre de usuario actualmente registrado de un servicio de Windows en.NET? (7)

Código modificado de la respuesta de Tapas :

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

Tengo un servicio de Windows que necesita el nombre de usuario actualmente registrado. System.Environment.UserName , la identidad de Windows y la autenticación de formulario de Windows, pero todos devuelven " Sistema " como el usuario ya que 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?


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:

System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName.

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


Esta es una consulta de 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"];

Deberá agregar System.Management en References manualmente.


La solución ManagementObjectSearcher ("SELECT UserName FROM Win32_ComputerSystem") funcionó bien para mí. PERO no funciona si el servicio se inicia a través de una conexión de escritorio remoto. Para solucionar este problema, podemos solicitar el nombre de usuario del propietario de un proceso interactivo que siempre se ejecuta en una PC: explorer.exe. De esta forma, siempre obtenemos el nombre de usuario registrado actualmente de Windows 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; } }


Prueba WindowsIdentity.GetCurrent() . Necesita agregar referencia a System.Security.Principal


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

Environment.UserName

Se mostrará el formato: ''Nombre de usuario'', en lugar de

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

Formato de visualización: ''Nombre de red / Nombre de usuario''

Elija el formato que desee.


También puedes probar

System.Environment.GetEnvironmentVariable("UserName");