1

問題

  1. UnAuthorizedAccessException: C:\ などのディレクトリを再帰的に検索する
    と、「パス 'c:\Documents and Settings\' へのアクセスが拒否されました。」UAC Priveledges がアップグレードされ、管理者グループ アクセスがある場合でも発生します。

試みられた方法

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

            }

        }
    }
}
4

2 に答える 2

2

残念ながら、これを処理する唯一の方法は、手動で再帰を実行することです。Microsoft独自のサンプルコードでも、1つ以上のディレクトリにアクセスできないために検索全体が失敗するのを避けるために、このようにしています。

つまり、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 に答える