【问题标题】:UnauthorizedAccessException in my own directory我自己的目录中的 UnauthorizedAccessException
【发布时间】:2009-07-12 16:18:27
【问题描述】:

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

【问题讨论】:

    标签: c# uac privileges


    【解决方案1】:

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

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

    public static FileInfo[] GetFilesSafe(this DirectoryRoot root, string path) {
      try {
        return root.GetFiles(path);
      } catch ( UnauthorizedAccessException ) {
        return new FileInfo[0];
      }
    }
    

    【讨论】:

    • 使用扩展方法是解决异常的一个很好的解决方案。为了在我的开始菜单上获取“丢失”条目,我遵循了注册表项“HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell\Folders\Common Start Menu”所指向的路径。Thnx!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多