내 디렉토리에서 무단 AdaccessException
-
12-09-2019 - |
문제
시작 메뉴의 항목을 반복하려고 노력하고 있지만 무단 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];
}
}
제휴하지 않습니다 StackOverflow