GetAFiles () UnAuthorizedAccessAcception в WIN7 - PullRequest
1 голос
/ 27 января 2011

Проблемы

  1. UnAuthorizedAccessException: при рекурсивном поиске в каталоге, например C: \
    «Доступ к пути« c: \ Documents and Settings \ »запрещен». Происходит даже с обновленными привилегиями UAC и доступом к группе администраторов.

Попытка методов

  1. Try & Catch: использование любого из этих методов (Exception, 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());

            }

        }
    }
}

Ответы [ 2 ]

2 голосов
/ 27 января 2011

К сожалению, единственный способ справиться с этим - выполнить рекурсию вручную.Даже в собственном примере кода Microsoft они делают это таким образом, чтобы избежать сбоя всего поиска, потому что к одному или нескольким каталогам невозможно получить доступ.

Другими словами, используйте только SearchOption.AllDirectories когда вы ищете ограниченное подмножество каталогов, которое, как вы уверены, не будет содержать каталогов, к которым у вас не будет доступа.

0 голосов
/ 27 января 2011

Чтобы ваша программа работала как с правами администратора, так и с другими пользователями, вам необходимо выдать себя за пользователя или пересобрать приложение в «Запуск от имени администратора» каждый раз, когда оно выполняется или используется любым пользователем. Чтобы создать приложение такого типа, вам нужно добавить файл app.manifest в свой проект и откомментировать следующую строку настроек в app.manifest

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

Подробнее читайте здесь: http://midnightprogrammer.net/post/How-To-Build-UAC-Compatible-Application-In-NET.aspx

...