2011-03-01 5 views
0

실행중인 응용 프로그램 (mozila, visual studio 등)의 이름을 얻으려고합니다. 코드가 잘못되었지만 "Access Denied"예외가 발생했습니다. 이 문제를 어떻게 해결 해야할지 모르겠습니다.실행중인 응용 프로그램의 이름을 가져올 수 없음

StringBuilder sb = new StringBuilder(); 

       foreach (Process p in Process.GetProcesses(".")) 
       { 
        try 
        { 
         foreach (ProcessModule pm in p.Modules) 
         { 
          sb.Append("Image Name:\t" + 
           pm.ModuleName.ToString() 
           + Environment.NewLine); 

          sb.Append("File Path:\t\t" + 
           pm.FileName.ToString() + 
           Environment.NewLine); 

          sb.Append("Memory Size:\t" + 
           pm.ModuleMemorySize.ToString() + 
           Environment.NewLine); 

          sb.Append("Version:\t\t" + 
           pm.FileVersionInfo.FileVersion.ToString() + 
           Environment.NewLine); 

          sb.Append(Environment.NewLine); 
         } 
        } 
        catch { } 
       } 
+2

빈 캐치 대신 예외 메시지와 스택 추적을 문자열에 넣고 stacktrace를 표시하거나 어쨌든 로거 클래스를 사용하십시오. 다음과 같은 빈 쓸모없는 잡을 피하십시오 :) –

+0

다음과 같은 보안 문제를 확인하십시오. 관리자입니까, UAC가 켜져 있습니까? –

+0

앱을 관리자로 실행하십시오. –

답변

3

코드가 정상입니다. 권한 문제입니다.

아마도이 API에 액세스 할 수있는 권한이없는 사용자 계정으로 이것을 얻으려고합니다.

성능 카운터 사용자 같은라는 그룹이있다, 관리 또는 성능 카운터 사용자 그룹에 응용 프로그램 계정을 추가합니다.

ASP.NET을 사용하는 경우 ASPNET 계정 (기본적으로 구성됨)에는이 API에 액세스 할 수있는 권한이 없습니다.

+0

Windows 서비스를 사용하고 있습니다. UAC가 꺼져 있습니다. 저는 관리자입니다. 하지만 나는 다른 것을 생각해. 이 Windows 7은 MAC OS X의 가상 컴퓨터에 설치되어 있습니다. 문제가 발생했을 가능성이 있습니까? – 1110

+0

예, 관리자입니까, 서비스를 실행하는 사용자 계정입니까? services.msc를 시작하고 서비스에 대한 "다음 계정으로 로그온"열을보십시오. – Branimir

+0

내 서비스의 열로 '로컬 서비스'입니다. – 1110

0

아하. 계정 유형을 '로컬 서비스'에서 '로컬 시스템'으로 변경했습니다.

+0

이것은 실제로 대답이 아닙니다. Branimir의 답변에 대한 의견으로 추가해야합니다. 이미 동의 했으므로 도움을 준 것으로 보입니다. – Benjol

관련 문제