2012-01-27 7 views
0

私は2つのディレクトリ間の違いを見つけるために異なるユーザーを偽装しようとしています。これは私のコードですが、クエリが実行されるとAccess deniedが発生します。両方のDirectoryInfoが実行されると、ユーザーが正しく、上記の偽装が機能することに注意してください。linqクエリで、異なるディレクトリの異なるユーザーを偽装する方法はありますか?

偽装は、おそらく現在のスレッドの資格情報を設定し、あなたがアクセス拒否エラーを取得する理由です
Dim impersonateUser As New UserImpersonation 
      impersonateUser.impersonateUser("user1", "", "password1") 
      Dim dir1 = New DirectoryInfo("\\10.11.11.122\OnDemand Recordings") 
      impersonateUser.undoimpersonateUser() 

      impersonateUser.impersonateUser("user2", "", "password2") 
      Dim dir2 = New DirectoryInfo("\\10.11.11.172\OCDialer_Recordings\OnDemand") 
      impersonateUser.undoimpersonateUser() 

'In this Block i get access denied 
      Dim filesinboth = From f1 In dir1.EnumerateFiles(System.IO.SearchOption.AllDirectories) 
        Join f2 In dir2.EnumerateFiles(System.IO.SearchOption.AllDirectories) On f1.Name Equals f2.Name 
        Select f1.Name 

答えて

0

- 第二偽装が第一を上書きして(とあなたが単一のスレッドを実行している複数のユーザーを持つことはできません/ appと同時に)。

はこれを試してみてください:

これは、各ファイル/ディレクトリ(たとえば自分の名前)に関する情報の比較的小さな量を比較している場合にのみ動作します。ディレクトリやファイルへの[完全]パスをリストやツリー/再帰コレクションのようなものにします(後者のクラスのようなものを作成することができます)。

class dir 
{ 
    public string name { get; set; } 
    public List<dir> dirs { get; set; } 
    public string files { get; set; } 
} 

List<string>(簡単な比較のために同じ場合)に完全なパスを保存するだけです。

次に、完全なディレクトリを個別に読んでください。後でそれらを比較する。 3番目のリストに差異を保存します。

+0

はい、その場合は、ありがとうございます – themis

関連する問題