UnauthorizedAccessException в моем собственном каталоге

StackOverflow https://stackoverflow.com/questions/1116344

  •  12-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь перебирать элементы в меню «Пуск», но продолжаю получать исключение UnauthorizedAccessException.Я владелец каталога, а мой пользователь — администратор.

Вот мой метод (он находится в проекте 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