1

スタート メニューの項目を繰り返し処理しようとしていますが、UnauthorizedAccessException が引き続き発生します。私はディレクトリの所有者であり、私のユーザーは管理者です。

これが私の方法です(それはdllプロジェクトにあります):

// root = C:\Users\Fernando\AppData\Roaming\Microsoft\Windows\Start Menu
private void walkDirectoryTree(DirectoryInfo root) {
    try {
        FileInfo[] files = root.GetFiles("*.*");
        foreach (FileInfo file in files) {
            records.Add(new Record {Path = file.FullName});
        }
        DirectoryInfo[] subDirectories = root.GetDirectories();
        foreach (DirectoryInfo subDirectory in subDirectories) {
            walkDirectoryTree(subDirectory);
        }
    } catch (UnauthorizedAccessException e) {
        // do some logging stuff
        throw; //for debugging
    }
}

サブディレクトリの反復処理を開始すると、コードは失敗します。他に何をすべきですか?マニフェスト ファイルを作成しようとしましたが、うまくいきませんでした。別のポイント (関連する場合): Visual Studio (管理者として実行される) でいくつかの単体テストを実行しているだけです。

4

1 に答える 1

4

説明によると、UAC を有効にして実行している場合、ユーザーがアクセスできないディレクトリがあるようです。コードに本質的な問題はなく、その状況での動作は設計によるものです。現在実行中のコンテキストでは、アカウントがこれらのディレクトリにアクセスできないという事実を回避するために、コードでできることは何もありません。

あなたがする必要があるのは、あなたがアクセス権を持っていないディレクトリを説明することです. おそらく最良の方法は、いくつかの拡張メソッドを追加することです。例えば

public static FileInfo[] GetFilesSafe(this DirectoryRoot root, string path) {
  try {
    return root.GetFiles(path);
  } catch ( UnauthorizedAccessException ) {
    return new FileInfo[0];
  }
}
于 2009-07-12T17:09:14.830 に答える