문제

시작 메뉴의 항목을 반복하려고 노력하고 있지만 무단 AccessException을 계속 받고 있습니다. 저는 디렉토리의 소유자이고 내 사용자는 관리자입니다.

내 방법은 다음과 같습니다 (DLL 프로젝트에 있습니다).

// root = C:\Users\Fernando\AppData\Roaming\Microsoft\Windows\Start Menu
private void walkDirectoryTree(DirectoryInfo root) {
    try {
        FileInfo[] files = root.GetFiles("*.*");
        foreach (FileInfo file in files) {
            records.Add(new Record {Path = file.FullName});
        }
        DirectoryInfo[] subDirectories = root.GetDirectories();
        foreach (DirectoryInfo subDirectory in subDirectories) {
            walkDirectoryTree(subDirectory);
        }
    } catch (UnauthorizedAccessException e) {
        // do some logging stuff
        throw; //for debugging
    }
}

코드는 하위 디렉토리를 반복하기 시작하면 실패합니다. 또 무엇을해야합니까? 이미 매니페스트 파일을 만들려고했지만 작동하지 않았습니다. 또 다른 요점 (관련이있는 경우) : Visual Studio (관리자로 실행됨)로 일부 단위 테스트를 실행하고 있습니다.

도움이 되었습니까?

해결책

설명을 기반으로 UAC 활성화로 실행할 때 사용자가 액세스 할 수없는 디렉토리가있는 것으로 보입니다. 코드에는 본질적으로 아무런 문제가 없으며 해당 상황의 동작은 설계에 의한 것입니다. 귀하의 계정이 현재 실행중인 상황에서 해당 디렉토리에 액세스 할 수 없다는 사실을 알기 위해 코드에서 할 수있는 일은 없습니다.

당신이해야 할 일은 액세스 할 수없는 디렉토리를 설명하는 것입니다. 가장 좋은 방법은 아마도 몇 가지 확장 방법을 추가하는 것입니다. 예를 들어

public static FileInfo[] GetFilesSafe(this DirectoryRoot root, string path) {
  try {
    return root.GetFiles(path);
  } catch ( UnauthorizedAccessException ) {
    return new FileInfo[0];
  }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top