1

我正在尝试遍历开始菜单上的项目,但我不断收到 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(以管理员身份执行)运行一些单元测试。

4

1 回答 1

4

根据您的描述,在启用 UAC 的情况下运行时,您的用户似乎无权访问一个目录。您的代码本质上没有任何问题,并且在这种情况下的行为是设计使然。您无法在代码中做任何事情来解决您的帐户在当前运行的上下文中无权访问这些目录的事实。

您需要做的是说明您无权访问的目录。最好的方法可能是添加一些扩展方法。例如

public static FileInfo[] GetFilesSafe(this DirectoryRoot root, string path) {
  try {
    return root.GetFiles(path);
  } catch ( UnauthorizedAccessException ) {
    return new FileInfo[0];
  }
}
于 2009-07-12T17:09:14.830 回答