2014-09-23 3 views
1

Я использую 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(); 

    } 
} 

Благодарности

+0

Вы настраиваете себя на гарантированный сбой, пока вы повторяете GetProcesses(). Вы должны быть избирательными, чтобы избежать тех, с которыми вы никогда не сможете получить доступ. Точка использования WCF - это никогда не делать этого. –

+0

Я не уверен, почему это помечено для закрытия, ясно, что задают, и это не «широко». Пользователь хочет получить все запущенные в данный момент процессы, но разрешения на обслуживание недостаточно высоки, и он получает отказ в доступе. Не создавая конкретного пользователя-администратора для работы службы под I donno, как вы бы это решили ... – Phill

+1

* Только * способ решить эту задачу - запустить службу с правами администратора. Это точка контроля доступа ... –

ответ

0

я ценю точку контроля доступа, я был просто интересно, если кто-либо разумные предложения о том, как лучше это реализовать, так что я могу получить доступ к необходимую мне информацию.

В конце концов, я реализовал внутреннюю службу Windows, с которой я могу позвонить с именем информации о процессе обслуживания, к которой я хочу получить доступ, трюк, выполняемый этой внутренней службой, с тем же доступом, что и наши другие внутренние процессы.

Когда я вызываю внутреннюю службу, у нее нет проблем с доступом к информации процесса любой из других служб Windows.

Смежные вопросы