org.eclipse.jetty:jetty-jsp:jar:9.2.26.v20180806:compile
Все версии артефактов из org.eclipse.jetty.*
должны быть одинаковыми.
Обновите вышеприведенный вариант до 9.4.14.v20181114
.
Вы можете использовать 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";
}
К сожалению, нет родного .Net способа получить владельца процесса.
Посмотрите на них для возможного решения:
var myApp = Process.GetProcessesByName("MyApp").FirstOrDefault();
if (myApp != null)
{
string username = GetUsername(myApp.SessionId);
}
Реализация метода GetUsername здесь: https://stackoverflow.com/a/35810391/10412686