在C#中读取隐藏的共享

时间:2020-03-06 14:47:25  来源:igfitidea点击:

因此,我有一个小型Capp,需要定期检查网络上多台计算机上目录的内容。我以为我可以将\ hostname \ C $读取为目录路径,但是对于普通的Directory类,似乎没有一种针对其他服务器进行身份验证的方法,因此我们可以访问隐藏的共享。
我敢肯定有一种简单的方法可以做到这一点,而我却忽略了它,但此刻我有些困惑。

解决方案

从http://bytes.com/forum/thread689145.html:

All processes run in the context of a
  logged-in user account. If you want to
  open a file on another computer, your
  application must be running in the
  context of a user that has permissions
  to open files on that machine. You can
  do this with Impersonation.

最简单的方法似乎是在其他计算机上给当前用户适当的权限。

我们是否正在寻找一种在运行时设置当前用户的方法?

如果没有,只要运行该进程的用户有权访问这些计算机,这将对我们有效:

DirectoryInfo di = new DirectoryInfo(@"\machineName\c$\temp");

FileInfo[] files = di.GetFiles();

foreach (FileInfo f in files)
{
    Debug.WriteLine(f.Name);
}

要对运行该进程的用户没有权限的共享进行身份验证(通常是管理共享),请尝试运行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...

如果不适合为运行该进程的用户帐户授予共享权限,这将非常有用。对于最终用户应用程序需要访问其自己不应该直接访问的共享上的数据的安全模型。