WIN7中的Getfiles()UnAuthorizedAccessAcception

时间:2011-01-27 08:25:07

标签: c# exception windows-7 unauthorized

问题

  1. UnAuthorizedAccessException:以递归方式搜索目录,例如C:\
      “拒绝访问路径'c:\ Documents and Settings \'。”甚至在UAC Priveledges升级后也会出现这种情况。管理员组访问。
  2. 尝试的方法

    1. 尝试& Catch:使用其中一种方法(Exception,UnAuthorizedAccessException,Blank Catch,continue)
    2. 问题

      1. 您如何处理此类异常并继续正常运行程序?这需要在非管理员和管理员帐户上工作。
      2. 示例代码

        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());
        
                    }
        
                }
            }
        }
        

2 个答案:

答案 0 :(得分:2)

不幸的是,处理此问题的唯一方法是手动执行递归。即使在微软自己的sample code中,他们也是这样做的,只是为了避免整个搜索失败,因为无法访问一个或多个目录。

换句话说,只有在您搜索有限的目录子集时才使用SearchOption.AllDirectories,而您确定这些目录中不包含任何您无法访问的目录。

答案 1 :(得分:0)

要使您的程序与管理员和非管理员用户一起工作,您需要模拟用户或在每次执行或由任何用户使用时将应用程序重新构建为“以管理员身份运行”。要构建此类应用程序,您需要将app.manifest文件添加到项目中,并在app.manifest中取消注释以下设置行

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

有关详细信息,请参阅:http://midnightprogrammer.net/post/How-To-Build-UAC-Compatible-Application-In-NET.aspx