Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Сортировка процессов по имени пользователя


Автор: atvin 27.8.2007, 21:48
Как получить имя пользователя, от имени которого запущен процесс (надо отсортировать процессы по имени пользователя, как в диспетчере задач: SYSTEM, NETWORK SERVICE, Имя _пользовалеля).

Автор: tol05 27.8.2007, 22:49
Процесс - это System.Diagnostic.Process, верно?
Код

string userName = myProc.StartInfo.UserName;

и так для всех

Автор: atvin 27.8.2007, 23:25
Цитата(tol05 @ 27.8.2007,  22:49)
Процесс - это System.Diagnostic.Process, верно?
Код

string userName = myProc.StartInfo.UserName;

и так для всех

Это не работает. Возвращает пустую строку.

Автор: Stepan_Lameroff 27.8.2007, 23:44
Цитата(atvin @  27.8.2007,  23:25 Найти цитируемый пост)
Это не работает. Возвращает пустую строку.


MSDN:
Цитата

If you did not use the Start method to start a process, the StartInfo property does not reflect the parameters used to start the process. For example, if you use GetProcesses to get an array of processes running on the computer, the StartInfo property of each Process does not contain the original file name or arguments used to start the process.


Код

        private static string GetProcessOwner(Process process)
        {
            try
            {
                ManagementObject classInstance =
                    new ManagementObject("root\\CIMV2",
                                         String.Format("Win32_Process.Handle='{0}'", process.Id),
                                         null);
                ManagementBaseObject outParams =
                    classInstance.InvokeMethod("GetOwner", null, null);

                return String.Format("{0}\\{1}", outParams["Domain"], outParams["User"]);
            }
            catch (ManagementException err)
            {
                Console.WriteLine("An error occurred while trying to execute the WMI method: {0}" + err.Message);
            }

            return String.Empty;
        }


Если WMI не устраивает, то см. WinAPI ф-цию CreateToolhelp32Snapshot (declared in Tlhelp32.h)


Автор: atvin 27.8.2007, 23:59
Цитата(Stepan_Lameroff @ 27.8.2007,  23:44)
Если WMI не устраивает, то см. WinAPI ф-цию CreateToolhelp32Snapshot (declared in Tlhelp32.h)

Посмотрел я CreateToolhelp32Snapshot - чето сложновато и не понятно.
А в твоем примере Studio не понимает: ManagementObject и ManagementBaseObject. где они описаны?

Автор: Stepan_Lameroff 28.8.2007, 00:37
using System.Management;//(+ reference в проект на System.Management)
WinAPI пример доделываю.

Автор: atvin 28.8.2007, 00:54
Посмотрел в MSDN - System.Management. Но у меня в System нету Management. Выдает ошибку при компиляции: The type or namespace name 'Management' does not exist in the namespace 'System' (are you missing an assembly reference?). В чем может быть проблема?

Автор: Stepan_Lameroff 28.8.2007, 01:05
WinAPI пример

Автор: Stepan_Lameroff 28.8.2007, 01:09
Я же написал
Цитата(Stepan_Lameroff @  28.8.2007,  00:37 Найти цитируемый пост)
using System.Management;//(+ reference в проект на System.Management)

Добавьте в проект ссылку (REFERENCE) на System.Management

Автор: atvin 28.8.2007, 01:26
Цитата(Stepan_Lameroff @ 28.8.2007,  01:09)
Добавьте в проект ссылку (REFERENCE) на System.Management

Можешь поподробней объяснить как это сделать, я такое никогда не делал.

А файл скачать не могу. Пишет "Обнаружена ошибка: Эта функция запрещена для Гостей". может на ящик скинь мне?

Добавлено через 7 минут и 28 секунд
С добавлением в проект ссылки (REFERENCE) на System.Management я разобрался.
А вот со скачкой файла - нет.

Автор: atvin 28.8.2007, 01:44
Огромное спасибо smile . Зараболо способом WMI. Как я давно искал ответ на этот вопрос.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)