¿Cómo obtener el nombre de usuario registrado actualmente en C#? [duplicar]

Posible duplicado:
Obtenga el nombre de usuario que inició sesión en C #

La aplicación C# puede ejecutarse directamente (doble clic en exe) o puede ejecutarse como administrador (Ejecutar como administrador).

Necesito ejecutar mi aplicación como administrador (Ejecutar como administrador) incluso en una cuenta de usuario simple.

Quiero obtener el nombre de usuario conectado actualmente usando C# (pero obtengo el nombre de usuario de administrador).

Probé muchas opciones como: Environment.Username, WindowsIdentity class, etc. Me da el nombre de usuario de administrador (porque ejecuté el exe como administrador), no el nombre de usuario actualmente conectado.

Esta es una aplicación winForm desarrollada en .net 3.5. El ejecutable de la aplicación se ejecuta con el inicio de sesión del administrador mediante un script vb. vb script se ejecuta tan pronto como el usuario inicia sesión.

Hay muchas consultas similares en este cuatro, pero todas las respuestas proporcionan el nombre de usuario del administrador, no el nombre de usuario que ha iniciado sesión actualmente. Por lo tanto, he publicado esta pregunta.

por favor responda mi consulta. Agradeciendotelo de antemano.

preguntado el 12 de junio de 12 a las 18:06

sin saber nada más sobre su aplicación, como qué tipo de autenticación, qué marco, cómo maneja los inicios de sesión y las sesiones, es casi imposible dar algún tipo de respuesta significativa:

¿Consola? WinForms? formularios web? ¿Luz plateada? WPF? -

4 Respuestas

Hay un par de respuestas aquí: Obtenga el nombre de usuario que inició sesión en C #

Primero probaría la api Win32.

contestado el 23 de mayo de 17 a las 13:05

Puede intentar consultar la lista de sesiones.

Recuperación de información de sesión de inicio de sesión

Puede averiguar el usuario real que está conectado actualmente buscando la sesión activa que no es una sesión de administrador.

http://pinvoke.net/ tiene la información sobre cómo llamar a métodos nativos desde C#.

Respondido el 12 de junio de 12 a las 19:06

Esa es una mala razón para rechazar una respuesta. .NET es un marco administrado que no es Supuesto para exponer tal funcionalidad de bajo nivel. No hay más remedio que usar P/Invoke para acceder a eso. O sabía eso y votó en contra maliciosamente, o no lo sabía, lo que significa que no tiene el derecho moral de votar en contra. - Sr. TA

El OP quiere una respuesta C#. Aunque podría usar código no administrado, existen métodos administrados disponibles. ¿Por qué complicar demasiado las cosas? De todos modos, hasta que el OP actualice su pregunta con más detalles, no podemos saber qué método es la respuesta correcta. - jrummell

Primero, no conozco ningún método administrado que le proporcione una lista de sesiones de usuario del sistema operativo y demás. En segundo lugar, incluso si hay una mejor solución que implica llamar a métodos administrados, no hace que mi respuesta sea incorrecta; llamar a funciones nativas desde C# es una práctica estándar. - Sr. TA

Lo suficientemente justo. Si edita su respuesta, puedo eliminar mi voto negativo. - jrummell

Gracias. Por cierto, el enlace en la respuesta de CM apunta a una página donde está disponible una solución solo para C #, por lo tanto, obtuve mi voto a favor (sin embargo, usa WMI). Sin embargo, no estoy seguro de si mi sugerencia o esa sugerencia funcionarían en la situación del OP. - Sr. TA

Esto debería hacer el trabajo -

AppDomain appDomain = Thread.GetDomain();
appDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
WindowsPrincipal windowsPrincipal = (WindowsPrincipal)Thread.CurrentPrincipal;

Console.WriteLine(windowsPrincipal.Identity.Name); 

Respondido el 12 de junio de 12 a las 19:06

No, si lo eres machine\UserLimited e ingresa las credenciales de UserAdmin en el cuadro ejecutar como que devuelve machine\UserAdmin - scott chambelán

Pensé que querías hacer otra cosa. Ejecute la aplicación desde la cuenta de 'administrador' con clic derecho -> Ejecutar como administrador - Máxima

Sí, pero si hace clic con el botón derecho en -> Ejecutar como administrador y el usuario actual no es miembro del grupo Administradores, le pedirá que use una cuenta diferente. Si eso sucede, su código muestra esa segunda cuenta. - scott chambelán

Gracias por responder. Esto le da el nombre de usuario del administrador con el que estoy ejecutando el exe. - user1451819

podrías usar System.Security.Principal.WindowsIdentity.GetCurrent().Name; y asignarlo a un string.

por ejemplo:

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

Respondido el 13 de junio de 12 a las 12:06

No, eso devolverá el nombre del usuario con el que se ejecutó la aplicación: scott chambelán

Gracias por responder. Esto le da el nombre de usuario del administrador con el que estoy ejecutando el exe. - user1451819

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.