質問
したがって、ネットワーク上の複数のマシン上のディレクトリの内容を定期的に確認する必要がある小さなC#アプリがあります。 \ hostname \ C $をディレクトリパスとして読むことができると思いましたが、通常のDirectoryクラスでは、隠し共有にアクセスできるように他のサーバーに対して認証する方法はないようです。 私が見落としていた簡単な方法があると確信していますが、現時点では少し困惑しています。
解決
http://bytes.com/forum/thread689145.html から:
すべてのプロセスは、 ログインユーザーアカウント。あなたがしたい場合は 別のコンピューターでファイルを開き、 アプリケーションは 権限を持つユーザーのコンテキスト そのマシンでファイルを開きます。あなたはできる 偽装でこれを行います。
最も簡単な方法は、現在のユーザーに他のマシンの適切な権限を与えることです。
他のヒント
プロセスを実行しているユーザーがアクセス許可を持っていない共有で認証するには(多くの場合、管理共有の場合)、net useコマンドを実行してください:
net use SERVERNAME\IPC$ /user:USERNAME PASSWORD
実際に共有にアクセスしようとするコードの前に、これを別のプロセスで実行してみてください。例:
ProcessStartInfo psi = new ProcessStartInfo(
"net", "use " + SERVERNAME + @"\IPC$ /user:" + USERNAME + " " + PASSWORD);
Process p = new Process();
p.StartInfo = psi;
p.Start();
p.WaitForExit();
p.Close();
// The code to access the share follows...
これは、プロセスを実行しているユーザーアカウントの共有に許可を与えることが適切でない場合に役立ちます。エンドユーザーアプリケーションが、ユーザー自身が直接アクセスできない共有上のデータにアクセスする必要があるセキュリティモデルの場合。
実行時に現在のユーザーを設定する方法をお探しですか?
そうでない場合、プロセスを実行しているユーザーがそれらのマシンにアクセスできる限り、これはあなたのために機能します:
DirectoryInfo di = new DirectoryInfo(@"\\machineName\c$\temp");
FileInfo[] files = di.GetFiles();
foreach (FileInfo f in files)
{
Debug.WriteLine(f.Name);
}