2011-01-27 2 views
1

문제있는 GetFiles() UnAuthorizedAccessAcception

  1. UnAuthorizedAccessException :
    \ 경로 'c : \ 문서 및 설정 \'에 대한 '액세스 : C로 반복적으로 같은 디렉토리를 검색 할 때 거부됩니다. " UAC Priveledges를 업그레이드 한 경우에도 발생합니다. & 관리자 그룹 액세스

시도 방법

  1. 시도 & 캐치 : 사용 중 다음 방법 중 하나 (예외, UnAuthorizedAccessException는, 빈 캐치 계속)

질문

  1. 이런 종류의 예외를 어떻게 처리하고 정상적으로 프로그램을 계속 실행합니까? 이것은 비 관리자 및 관리자 계정에서 모두 작동해야합니다.

예제 코드이 처리하는

using System; 
using System.IO; 

namespace filecheck 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int i = 0; 
      int html = 0; 
      try 
      { 
       string[] filePaths = Directory.GetFiles(@"c:\", "*.html", SearchOption.AllDirectories); 

       foreach (string files in filePaths) 
       { 
        if (Convert.ToBoolean(files.IndexOf("html"))) 
        { 
         html++; 
        } 
        Console.WriteLine(files); 
        i++; 

       } 
       Console.Write("# Files found: {0} Html: {1)", i, html); 
      } 
      catch (UnauthorizedAccessException e) 
      { 
       Console.WriteLine("The process failed: {0}", e.ToString()); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine("The process failed: {0}", e.ToString()); 

      } 

     } 
    } 
} 
+0

을 : 당신이 당신의 프로젝트에 app.manifest 파일을 추가하고 자세한 내용은 여기를 읽어 들어 app.manifest

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

에서 설정의 다음 줄을 주석을 해제해야하는 응용 프로그램의이 종류를 구축하려면 프로그래밍 방식으로 문서 및 설정에 액세스하는 것은 허용되지 않습니다. 슈퍼 관리자가 아니어도. –

+0

@Theun : "슈퍼 관리자"란 무엇입니까? –

+0

@Theun : 숨겨진 관리자 (기본 제공) 계정에 대해 이야기하고 있다고 가정합니다. 나는 그것을 시도하지는 않았지만 시스템에 대한 제한없는 액세스 권한을 제공해야합니다. 나는 그것을 필요로하지 않는다. 이 성가신 unauthroizedaccess 접근법에 의해 차단 된 내 검색을 둘러 볼 수있는 방법을 찾고 있습니다. – Nightforce2

답변

2

불행하게도 유일한 방법은 수동으로 재귀를 수행하는 것입니다. 심지어 마이크로 소프트 자신의 sample code에서도 이런 방식으로, 하나 이상의 디렉토리에 액세스 할 수 없기 때문에 전체 검색이 실패하지 않도록 방지합니다.

다른 말로하면 액세스 할 수없는 디렉토리가없는 디렉토리의 일부 하위 집합을 검색 할 때 SearchOption.AllDirectories 만 사용하십시오.

+0

"C : \"에서 작동하지 않는 접근 방식은 전혀 반환하지 않습니다. 샘플 디렉토리 검색을 c : \ user \ \ Desktop과 같이 변경하면 내가 묻는 모든 것을 찾을 수 있습니다. 건너 뛸 디렉토리를 어떻게 알 수 있습니까? 현재 사용자 역할에 권한이없는 경우 폴더 보안 속성을 확인하고 건너 뜁니다. 이에 대한 가능한 해결책이 있어야합니다. 그들은 예외를 처리하고 계속 진행할 수 있다고 말합니다.하지만이 프로그램은 프로그램 실행을 완전히 멈추게하여 당황 스럽습니다. – Nightforce2

+0

@ Nightforce2 : Windows 7 (및 아마도 Vista에서도) 시스템 드라이브의 루트 (일반적으로 C : \\)는 기본적으로 쓰기 금지되어 있지만 코드가 읽히기 때문에 나는 실패하지 않을 것이라고 생각했을 것입니다. 그래서 나는 왜 당신이 그 문제를 겪고 있는지 확신하지 못한다. 귀하의 계정에 시스템 드라이브의 루트에 대한 읽기 권한이 없다면 Windows를 실제로 실행할 수 없다고 생각했습니다. –

+0

UAC 때문인 것으로 가정합니다. 그것은 그 다음에 더 많은 문제를 일으 킵니다. – Nightforce2

0

관리자 및 비 관리자 사용자 모두와 함께 프로그램을 작동 시키려면 모든 사용자가 실행하거나 사용할 때마다 "관리자 권한으로 실행"하도록 사용자를 가장하거나 응용 프로그램을 다시 빌드해야합니다. 나는 마찬가지로 지금까지 http://midnightprogrammer.net/post/How-To-Build-UAC-Compatible-Application-In-NET.aspx

+0

나는 관리자 역할을하고 업그레이드 된 priveledges에 UAC를 사용하기 때문에 적용 할 수 없습니다. 따라서이 옵션을 설정하면 프로그램을 시작할 때 UAC에서 사용자 에스컬레이션 확인을 요청하는 메시지 만 표시됩니다. – Nightforce2