UnauthorizedAccessException в моем собственном каталоге - PullRequest
1 голос
/ 12 июля 2009

Я пытаюсь перебрать элементы моего меню «Пуск», но получаю исключение 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 (которая выполняется от имени администратора).

1 Ответ

4 голосов
/ 12 июля 2009

Судя по вашему описанию, существует каталог, к которому у вашего пользователя нет доступа при работе с включенным контролем учетных записей. В вашем коде нет ничего плохого по своей сути, и поведение в этой ситуации задуманно. Вы ничего не можете сделать в своем коде, чтобы обойти тот факт, что ваша учетная запись не имеет доступа к этим каталогам в контексте, в котором она в данный момент работает.

Что вам нужно сделать, так это создать учетную запись для каталога, к которому у вас нет доступа. Наилучшим способом, вероятно, является добавление нескольких методов расширения. Например

public static FileInfo[] GetFilesSafe(this DirectoryRoot root, string path) {
  try {
    return root.GetFiles(path);
  } catch ( UnauthorizedAccessException ) {
    return new FileInfo[0];
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...