WIN7中的Getfiles() UnAuthorizedAccessAcception
Posted
技术标签:
【中文标题】WIN7中的Getfiles() UnAuthorizedAccessAcception【英文标题】:Getfiles() UnAuthorizedAccessAcception in WIN7 【发布时间】:2011-06-16 09:26:19 【问题描述】:问题
-
UnAuthorizedAccessException:递归搜索目录时,例如 C:\
“访问路径 'c:\Documents and Settings\' 被拒绝。”即使在 UAC 特权升级和管理员组访问权限的情况下也会发生。
尝试的方法
-
Try & Catch:使用其中一种方法(异常、UnAuthorizedAccessException、Blank Catch、继续)
问题
-
如何处理这种异常并继续正常运行程序?这需要对非管理员和管理员帐户都有效。
示例代码
using System;
using System.IO;
namespace filecheck
class Program
static void Main(string[] args)
int i = 0;
int html = 0;
try
string[] filePaths = Directory.GetFiles(@"c:\", "*.html", SearchOption.AllDirectories);
foreach (string files in filePaths)
if (Convert.ToBoolean(files.IndexOf("html")))
html++;
Console.WriteLine(files);
i++;
Console.Write("# Files found: 0 Html: 1)", i, html);
catch (UnauthorizedAccessException e)
Console.WriteLine("The process failed: 0", e.ToString());
catch (Exception e)
Console.WriteLine("The process failed: 0", e.ToString());
【问题讨论】:
据我所知,不允许以编程方式访问文档和设置。甚至不是超级管理员 @Theun:什么是“超级管理员”? @Theun:我假设您在谈论隐藏管理员(内置)帐户。我没有尝试过,但这应该可以让您不受限制地访问系统。我不需要那个。只是在寻找一种方法来绕过我的搜索被这种烦人的未经授权的访问废话所阻止。 【参考方案1】:不幸的是,处理这个问题的唯一方法是手动进行递归。即使在微软自己的sample code 中,他们也是这样做的,只是为了避免由于一个或多个目录无法访问而导致整个搜索失败。
因此,换句话说,仅当您搜索有限的目录子集时才使用SearchOption.AllDirectories
,您确定其中不包含任何您无权访问的目录。
【讨论】:
即使有方法在“C:\”中不起作用,它也不会返回任何东西。如果我将示例目录搜索更改为 c:\user\要让您的程序同时与管理员和非管理员用户一起工作,您需要模拟用户或重新构建您的应用程序以在任何用户执行或使用它时“以管理员身份运行”。要构建这种应用程序,您需要将 app.manifest 文件添加到您的项目中并取消注释 app.manifest 中的以下设置行
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
更多内容请阅读:http://midnightprogrammer.net/post/How-To-Build-UAC-Compatible-Application-In-NET.aspx
【讨论】:
这不适用,因为我是管理员角色并使用 UAC 升级权限。所以你看到设置这个选项只会让 UAC 在我启动程序时提示我用户升级确认。以上是关于WIN7中的Getfiles() UnAuthorizedAccessAcception的主要内容,如果未能解决你的问题,请参考以下文章
Directory.GetFiles:如何只获取文件名,而不是完整路径? [复制]
Directory.EnumerateFiles 与 Directory.GetFiles 有啥区别?