我正在尝试迭代开始菜单上的项目,但我一直收到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(以管理员身份执行)运行一些单元测试。
答案 0 :(得分:4)
根据您的描述,在启用UAC的情况下运行时,似乎存在您的用户无权访问的目录。您的代码没有任何内在错误,在这种情况下的行为是设计的。您无法在代码中执行任何操作来解决您的帐户在当前运行的上下文中无法访问这些目录这一事实。
您需要做的是考虑您无权访问的目录。最好的方法可能是添加一些扩展方法。例如
public static FileInfo[] GetFilesSafe(this DirectoryRoot root, string path) {
try {
return root.GetFiles(path);
} catch ( UnauthorizedAccessException ) {
return new FileInfo[0];
}
}