2014-09-23 4 views
1

Windows 서비스로 실행되는 wcf 서비스 호스트에 액세스하려면 System.Diagnostics.Process.GetProcessByName()을 사용하고 있습니다.Process.MainModule 액세스가 거부되었습니다.

프로세스에서 여러 서비스를 호스팅하고 있으며 서비스 중 하나에 대해 WorkingSet64에 액세스하려고합니다. System.Diagnostics.Process.GetProcessByName()을 호출하면 제공된 네 개의 프로세스가 반환됩니다.이 프로세스를 통해 반복하고 Process.MainModule.Filename에 액세스하면 "액세스가 거부되었습니다"라는 오류가 발생합니다.

프로세스가 시스템 프로세스로 실행되는데, 내 dev 컴퓨터에서 코드를 실행하면 서버 (ACL 켜기)에서 코드를 실행할 때 (ACL이 꺼져 있음) 예상되는 정보를 반환하는 것처럼 보입니다. 액세스가 거부되었습니다. 예외가 Throw됩니다.

이 문제는 몇 군데 언급되었지만 대부분의 답변에서는 액세스 할 수없는 항목을 건너 뛰기 만하면됩니다. 그러면 원하는 항목이 아닌 액세스 할 수없는 항목을 검사해야합니다.

코드는 아래의 예를 보여줍니다

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

이것이 왜 닫히는 지 확실하지 않습니다. 무엇이 요청되고 있으며 그것이 '광범위하지 않은'것이 분명합니다. 사용자는 현재 실행중인 모든 프로세스를 원하지만 서비스 권한이 충분하지 않아 액세스가 거부됩니다. 나는 당신이 어떻게이 문제를 해결할 것인가 아래에서 실행되는 서비스에 대한 특정 관리자를 만들지 않고 ... – Phill

+1

해결할 수있는 * 유일한 * 방법은 관리자 권한으로 서비스를 실행하는 것입니다. 그것이 바로 액세스 제어의 핵심입니다 ... –

답변

0

나는 사람이 더 나은 구현하는 방법에 대한 지능적인 제안이 있다면, 난 그냥 궁금 해서요 액세스 제어의 점에 감사를이 그래서 액세스 할 수 있습니다 내가 필요한 정보.

결국 저는 액세스하려는 서비스 프로세스 정보의 이름으로 호출 할 수있는 내부 Windows 서비스를 구현했습니다.이 내부 서비스는 다른 내부 프로세스와 동일한 액세스로 실행됩니다.

내부 서비스를 호출하면 다른 Windows 서비스 중 하나의 프로세스 정보에 액세스하는 데 문제가 없습니다.

관련 문제