Как я определяю владельца процесса в C#?

org.eclipse.jetty:jetty-jsp:jar:9.2.26.v20180806:compile

Все версии артефактов из org.eclipse.jetty.* должны быть одинаковыми.

Обновите вышеприведенный вариант до 9.4.14.v20181114.

41
задан knocte 12 November 2016 в 07:51
поделиться

3 ответа

Вы можете использовать WMI, чтобы получить пользователя, владеющего определенным процессом. Чтобы использовать WMI, вам нужно добавить ссылку на System.Management.dll в ваш проект.

По идентификатору процесса:

public string GetProcessOwner(int processId)
{
    string query = "Select * From Win32_Process Where ProcessID = " + processId;
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
    ManagementObjectCollection processList = searcher.Get();

    foreach (ManagementObject obj in processList)
    {
        string[] argList = new string[] { string.Empty, string.Empty };
        int returnVal = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList));
        if (returnVal == 0)
        {
            // return DOMAIN\user
            return argList[1] + "\\" + argList[0];
        }
    }

    return "NO OWNER";
}

По имени процесса (находит только первый процесс, настроить соответственно):

public string GetProcessOwner(string processName)
{
    string query = "Select * from Win32_Process Where Name = \"" + processName + "\"";
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
    ManagementObjectCollection processList = searcher.Get();

    foreach (ManagementObject obj in processList)
    {
        string[] argList = new string[] { string.Empty, string.Empty };
        int returnVal = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList));
        if (returnVal == 0)
        {
            // return DOMAIN\user
            string owner = argList[1] + "\\" + argList[0];
            return owner;       
        }
    }

    return "NO OWNER";
}
63
ответ дан 27 November 2019 в 00:21
поделиться

К сожалению, нет родного .Net способа получить владельца процесса.

Посмотрите на них для возможного решения:

4
ответ дан 27 November 2019 в 00:21
поделиться
    var myApp = Process.GetProcessesByName("MyApp").FirstOrDefault();
    if (myApp != null)
    {
        string username = GetUsername(myApp.SessionId);
    }

Реализация метода GetUsername здесь: https://stackoverflow.com/a/35810391/10412686

1
ответ дан 27 November 2019 в 00:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: