2013-06-18 4 views
3

I 유형의System.UnauthorizedAccessException (A 첫 번째 예외)

첫째 예외를 얻고있다 'System.UnauthorizedAccessException' 는

예외이에서가 mscorlib.dll에서 발생 약간의 코드 :

string[] filesList = Directory.GetFiles(@"C:\Program Files (x86)\", "*.exe", 
             SearchOption.AllDirectories); 

모든 작업은 .exe extention, 특정 디렉토리에서는 작동하지만 일부에서는이 문제가 발생합니다.

내가 해결할 수있는 것에 대한 아이디어는 크게 감사하겠습니다.

+0

예외 처리기가 호출되기 전에 "first chance exception"이 발생합니다. 이 경우 VS를 중지하지 않으려면 [디버그]> [예외]의 확인란을 선택 취소합니다. 몇 가지 제안한 것처럼 관리자로 디버거를 실행하면 동작이 변경됩니다. 높은 권한이 있거나없는 권한으로 프로그램을 테스트해야합니다. –

+0

감사합니다. 높은 권한이 작동했습니다. 메타의 보안 권한과 함께. – ScorpioBlue

답변

5

앱을 관리자로 실행해야합니다.

여기에 그것을하는 그는 올바른 방법입니다 :

http://blogs.msdn.com/b/nikhiln/archive/2007/04/19/embed-a-manifest-to-make-an-application-elevate-in-vista.aspx

+0

완벽하고 큰 도움이됩니다! 고마워. – ScorpioBlue

+0

exe ​​파일이 없으면 .dll 파일은 무엇을합니까? –

+0

@HotLicks, exe를 거치지 않고 dll에서 코드를 실행하는 방법을 잘 모르겠습니다. rundll32 또는 powershell과 같은 것을 통해 간접적으로 작업을 수행하는 경우에도 admin으로 실행할 수있는 .exe 두 가지가 있습니다. .exe가 있지만 제어 할 권한이 없다면 항상 자신의 .exe를 생성 할 수 있으며 권한 상승을 요청하고 결과를 상위 .exe로 반환합니다. –

3

일부 Windows 버전에서는 프로그램 파일 디렉토리가 잠겨 있습니다. 이렇게하면 잘못된 사용자가 올바른 OS 실행에 필수적인 파일 시스템 부분을 손상시키는 것을 방지 할 수 있습니다. 높은 권한으로 디버거 (및 응용 프로그램)를 실행하면 성공합니다.

+0

높은 권한으로 더 버그를 어떻게 실행할 수 있습니까? VS 2012를 사용하고 있습니다. – ScorpioBlue

+0

Restart dev studio; "관리자 권한으로 실행"선택; 마우스 오른쪽 버튼으로이 작업을 수행 할 수 있습니다. – Bathsheba

3

당신은 Vista를 사용하는 경우, 프로그램 파일 폴더 UAC에 의해 운영 체제에 의해 보호됩니다. 제한된 사용자 계정에서 실행할 때 가정하에 작성

응용 프로그램 사용자는 기계 전체 또는 시스템 디렉토리에 쓰기를 시도 종종 있기 때문에, 관리자 권한으로 이전 버전의 Windows 에서 경험 한 문제를 를 실행 될 것 (예 : 프로그램 파일) 또는 레지스트리 키. UAC는 파일 및 레지스트리 가상화를 사용하여 을 완화하려고 시도합니다.이 가상화는 사용자 프로필 내의 사용자 별 위치에 쓰기 (및 후속 읽기)를 리디렉션합니다 (및 후속 읽기). 예를 들어 , 응용 프로그램이 에 쓰기를 시도 할 경우 "C : \ 프로그램 파일 \ APPNAME \ settings.ini" 해당 디렉토리에 쓰기 권한이없는 사용자가 쓰기는 로 리디렉션 얻을 것이다 "C : \ 사용자 \ 사용자 이름 \의 AppData \ 로컬 \ VirtualStore \ 프로그램 파일 \ APPNAME \ settings.ini"

그리고 인식, 프로그램 파일이 특정 폴더입니다. 경로를 가져 오려면 Environment.SpecialFolder 열거 형을 사용할 수 있습니다. 처럼;

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) 
관련 문제