Я использую System.Diagnostics.Process.GetProcessByName(), чтобы получить доступ к хосту службы wcf, который работает как служба Windows.Отказано в доступе к процессу.MainModule
Процесс содержит несколько служб, и я пытаюсь получить доступ к WorkSet64 для одной из служб. Когда я вызываю System.Diagnostics.Process.GetProcessByName(), возвращается 4 процесса для предоставленного имени, когда я выполняю эти процессы и получаю доступ к процессу.MainModule.Filename, я получаю сообщение об ошибке «Отказано в доступе».
Процесс запускается как системный процесс, когда я запускаю код на своей машине dev, кажется, что он возвращает информацию, которую я ожидаю (ACL выключен), когда я запускаю код на сервере (ACL включен) исключение доступа исключено.
Я видел эту проблему, упомянутую в нескольких местах, но большинство ответов предлагают просто пропустить недоступные элементы с помощью try catch, и это не то, что я хочу, мне нужно проверить недоступные элементы.
Код ниже демонстрирует пример:
class Program
{
static void Main(string[] args)
{
Process[] service;
service = Process.GetProcesses();
Console.WriteLine(service.Count());
foreach (var s in service)
{
Console.WriteLine(s.ProcessName);
try
{
Console.WriteLine(s.WorkingSet64);
}
catch (Exception ex)
{
Console.WriteLine("ERROR---" + ex.Message);
}
Console.WriteLine("-------------------");
}
Console.ReadLine();
}
}
Благодарности
Вы настраиваете себя на гарантированный сбой, пока вы повторяете GetProcesses(). Вы должны быть избирательными, чтобы избежать тех, с которыми вы никогда не сможете получить доступ. Точка использования WCF - это никогда не делать этого. –
Я не уверен, почему это помечено для закрытия, ясно, что задают, и это не «широко». Пользователь хочет получить все запущенные в данный момент процессы, но разрешения на обслуживание недостаточно высоки, и он получает отказ в доступе. Не создавая конкретного пользователя-администратора для работы службы под I donno, как вы бы это решили ... – Phill
* Только * способ решить эту задачу - запустить службу с правами администратора. Это точка контроля доступа ... –