1

问题

  1. UnAuthorizedAccessException:递归搜索目录时,例如 C:\
    A “访问路径 'c:\Documents and Settings\' 被拒绝。” 即使在 UAC 特权升级和管理员组访问权限的情况下也会发生。

尝试的方法

  1. Try & Catch:使用其中一种方法(异常、UnAuthorizedAccessException、Blank Catch、继续)

问题

  1. 您如何处理这种异常并继续正常运行程序?这需要对非管理员和管理员帐户都有效。

示例代码

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

            }

        }
    }
}
4

2 回答 2

2

不幸的是,处理这个问题的唯一方法是手动进行递归。即使在微软自己的示例代码中,他们也是这样做的,只是为了避免由于一个或多个目录无法访问而导致整个搜索失败。

因此,换句话说,仅SearchOption.AllDirectories在您搜索有限的目录子集时使用,您确定不包含任何您无权访问的目录。

于 2011-01-27T08:52:55.240 回答
0

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

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

更多信息请阅读:http: //midnightprogrammer.net/post/How-To-Build-UAC-Compatible-Application-In-NET.aspx

于 2011-01-27T13:07:58.400 回答