UNAITHORIZELEDACCESSECCECTION em meu próprio diretório
-
12-09-2019 - |
Pergunta
Estou tentando iterar os itens no meu menu Iniciar, mas continuo recebendo a AuthorizedAccessException não autorizada. Sou o proprietário do diretório e meu usuário é um administrador.
Aqui está o meu método (está em um projeto de 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
}
}
O código falha quando começa a iterar sobre os subdiretos. O que mais devo fazer? Eu já tentei criar o arquivo manifesto, mas não funcionou. Outro ponto (se for relevante): estou apenas executando alguns testes de unidade com o Visual Studio (que é executado como administrador).
Solução
Com base na sua descrição, parece que existe um diretório no qual seu usuário não tem acesso ao executar com o UAC ativado. Não há nada inerentemente errado com seu código e o comportamento nessa situação é por design. Não há nada que você possa fazer no seu código para contornar o fato de que sua conta não tem acesso a esses diretórios no contexto em que está em execução no momento.
O que você precisará fazer é explicar o diretório ao qual não tem acesso. A melhor maneira é provavelmente adicionando alguns métodos de extensão. Por exemplo
public static FileInfo[] GetFilesSafe(this DirectoryRoot root, string path) {
try {
return root.GetFiles(path);
} catch ( UnauthorizedAccessException ) {
return new FileInfo[0];
}
}