Страницы

Поиск по вопросам

понедельник, 15 октября 2018 г.

Как получить имя пользователя C#

Можно ли как-нибудь получить имя пользователя под которым был произведен вход в систему, если же приложение запускается под другим именем?
Т.е. входит в систему(логинится) пользователь ivanov, запускает мое приложение используя учетные данные(логин и пароль) пользователя petrov. Можно ли как-то узнать что в системе именно ivanov.
Environment.UserName
и
System.Security.Principal.WindowsIdentity.GetCurrent().Name
дают одинаковый результат - petrov.


Ответ

Вот пример, который получает логин пользователя который зашел в систему.
private static string _username;
static void Main(string[] args) { foreach (var p in Process.GetProcessesByName("explorer")) { _username = GetProcessOwner(p.Id); }
// remove the domain part from the username var usernameParts = _username.Split('\\');
_username = usernameParts[usernameParts.Length - 1];
Console.WriteLine(_username); Console.ReadLine(); }
public static string GetProcessOwner(int processId) { var query = "Select * From Win32_Process Where ProcessID = " + processId; ManagementObjectCollection processList;
using (var searcher = new ManagementObjectSearcher(query)) { processList = searcher.Get(); }
foreach (var mo in processList.OfType()) { object[] argList = { string.Empty, string.Empty }; var returnVal = Convert.ToInt32(mo.InvokeMethod("GetOwner", argList));
if (returnVal == 0) { // return DOMAIN\user return argList[1] + "\\" + argList[0]; } }
return "NO OWNER"; }

Комментариев нет:

Отправить комментарий