Process.StartTime Доступ запрещен - PullRequest
2 голосов
/ 26 августа 2008

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

Поиск в Google показал, что я могу решить эту проблему, добавив пользователя, чьи учетные данные, под которыми выполняется код запроса, в группу «Пользователи журнала производительности». Однако такой группы пользователей на этом компьютере не существует.

Ответы [ 5 ]

3 голосов
/ 28 августа 2008

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

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

Окончательное решение для этого заключается в использовании 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);

Части этого были вычеркнуты из Code Project:

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

И «Эй, сценарист!»:

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

2 голосов
/ 26 августа 2008

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

На самом деле "Performance Counter Users Group" должно хватить. Группа не существует по умолчанию. Таким образом, вы должны создать это самостоятельно.

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

См. http://weblogs.asp.net/nunitaddin/archive/2004/11/21/267559.aspx

1 голос
/ 26 августа 2008

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

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

0 голосов
/ 26 августа 2008

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

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

0 голосов
/ 26 августа 2008

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

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

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

...