Страницы

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

четверг, 13 февраля 2020 г.

Как узнать путь к файлу по имени процесса и имени владельца?

#windows #c_sharp #процесс


На терминальном сервере человек 10 запускают приложение, пусть это будет CALC.exe,
и естетсвенно, в процессах 10 ОДИНАКОВЫХ процессов.

Здесь мне подсказали, как узнать путь к файлу нужного процесса.

А как сделать тоже самое, только если пользователя зовут ВАСЯ, то процесс запущенный
ВАСЕЙ и находился?
    


Ответы

Ответ 1



Самый простой вариант с помощью WMI: string processName = "calc.exe"; string currentUser = WindowsIdentity.GetCurrent().Name.Split('\\')[1]; string query = "Select * from Win32_Process Where Name = \"" + processName + "\""; ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); ManagementObjectCollection processes = searcher.Get(); foreach (ManagementObject proc in processes) { string owner; string[] argList = new string[] { string.Empty }; int returnVal = Convert.ToInt32(proc.InvokeMethod("GetOwner", argList)); if (returnVal == 0) owner = argList[0]; else continue; if (owner != currentUser) continue; // Вот тут-то и остался только нужный процесс! string path = proc["ExecutablePath"].ToString(); }

Ответ 2



На WinApi проблема решалась еще в первом вопросе) Поиск по msdn выдал сразу: Получаем токен процесса по хендлу: OpenProcessToken(...) SID пользователя - в информации о токене: GetTokenInformation(...) @kirelagin: Оригинал с мсдн: BOOL WINAPI OpenProcessToken( __in HANDLE ProcessHandle, __in DWORD DesiredAccess, __out PHANDLE TokenHandle ); В c#: [DllImport("Advapi32.dll", EntryPoint = "OpenProcessToken")] private static extern bool OpenProcessToken(int ProcessHandle, int DesiredAccess, int* TokenHandle);

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

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