Сведения о вопросе

Ayrat

03:45, 27th August, 2020

Теги

Process.StartTime Доступ Запрещен

Просмотров: 513   Ответов: 5

Мой код должен определить, как долго выполняется конкретный процесс. Но он продолжает отказывать с сообщением об ошибке отказано в доступе на запрос Process.StartTime . Это процесс, запущенный с учетными данными пользователя (т. е. не процесс с высокими привилегиями). Там явно есть параметр безопасности или параметр политики, или что- то , с чем мне нужно покрутить, чтобы исправить это, так как я не могу поверить, что свойство StartTime находится в рамках только для того, чтобы оно могло отказать 100% раз.

Поиск в Google показал, что я могу решить эту проблему, добавив пользователя, чьи учетные данные код запроса выполняется в группу "Performance Log Users". Однако на этой машине такой группы пользователей не существует.



  Сведения об ответе

DINO

21:06, 1st October, 2020

Я читал что-то похожее на то, что ты говорил в прошлом, Ларс. К сожалению, я несколько ограничен в том, что я могу сделать с рассматриваемой машиной (другими словами, Я не могу волей-неволей создавать группы пользователей: это сервер, а не просто какой-то случайный PC).

Спасибо за ответы, Уилл и Ларс. К сожалению, они не решили мою проблему.

Конечным решением этой проблемы является использование WMI:

using System.Management;
String queryString = "select CreationDate from Win32_Process where ProcessId='" + ProcessId + "'";
SelectQuery query = new SelectQuery(queryString);

ManagementScope scope = new System.Management.ManagementScope(@"\\.\root\CIMV2");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection processes = searcher.Get();

    //... snip ... logic to figure out which of the processes in the collection is the right one goes here

DateTime startTime = ManagementDateTimeConverter.ToDateTime(processes[0]["CreationDate"].ToString());
TimeSpan uptime = DateTime.Now.Subtract(startTime);

Части этого были соскоблены из проекта кода:

http://www.codeproject.com/KB/system/win32processusingwmi.aspx

И Еще: "Эй, Сценарист!":

http://www.microsoft.com/technet/scriptcenter/resources/qanda/jul05/hey0720.mspx


  Сведения об ответе

crush

02:25, 7th August, 2020

Процесс .Net 1.1 использует счетчики производительности для получения информации. Либо они отключены, либо пользователь не имеет административных прав. Убедитесь, что счетчики производительности включены и пользователь является администратором, который должен заставить ваш код работать.

На самом деле "Performance Counter Users Group" должно быть достаточно. По умолчанию группа не существует. Поэтому вы должны создать его сами.

Процесс .Net 2.0 не зависит от счетчиков производительности.

Увидеть http://weblogs.asp.net/nunitaddin/archive/2004/11/21/267559.aspx


  Сведения об ответе

lesha

14:22, 17th August, 2020

Базовый код должен иметь возможность вызывать OpenProcess, для чего может потребоваться SeDebugPrivilege.

Является ли процесс, который вы выполняете запрос StartTime, запущенным от имени другого пользователя, вашим собственным процессом?


  Сведения об ответе

$DOLLAR

15:09, 21st August, 2020

Ладно, извини, что не получилось... Я не эксперт по ASP.NET олицетворению, я обычно использую пулы приложений, которые я не думаю, что вы можете сделать на W2K вы пробовали написать крошечное тестовое приложение, которое делает тот же запрос, а затем запускает его от имени различных пользователей?

Я неохотно публикую здесь фрагмент кода фреймворка MS, но вы можете использовать либо Reflector, либо это: http://www.codeplex.com/NetMassDownloader , чтобы получить исходный код для соответствующих битов фреймворка, чтобы попытаться реализовать различные биты, чтобы увидеть, где это не удается.

Можете ли вы получить любую другую информацию о процессе, не получая отказа в доступе?


  Сведения об ответе

Chhiki

11:57, 4th August, 2020

Я могу перечислить процесс (т. е. функция GetProcessById работает), и у нас есть другой код, который получает имя EXE и другие биты информации.

Я дам тестовое приложение попробовать. Я также попытаюсь использовать WMI, чтобы получить эту информацию, если я не могу заставить реализацию C# работать должным образом в короткие сроки (это не критическая функциональность, поэтому я не могу тратить на нее дни).


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться