質問

私は、スタートメニューの項目を反復処理しようとしているが、私は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にいくつかのユニットテストを実行しているよ。

役に立ちましたか?

解決

あなたの説明に基づいて、有効になってUACを実行している場合、ユーザーがアクセス権を持っていない先のディレクトリがあります表示されます。本質的にあなたのコードと間違って、その状況での動作は仕様です何もありません。アカウントが現在実行されている文脈でそれらのディレクトリへのアクセス権を持っていないという事実を回避するために、あなたのコード内でできることは何もありません。

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

public static FileInfo[] GetFilesSafe(this DirectoryRoot root, string path) {
  try {
    return root.GetFiles(path);
  } catch ( UnauthorizedAccessException ) {
    return new FileInfo[0];
  }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top