在C中阅读隐藏的共享#

问题描述:

因此,我有一个小型的C#应用​​程序需要定期检查网络上多台机器上的目录内容。我以为我可以只读\ hostname \ C $作为目录路径,但对于普通的Directory类,似乎没有办法对其他服务器进行身份验证,因此您可以访问隐藏的共享。 我确信有一个简单的方法可以做到这一点,我忽略了,但目前我有点失落。在C中阅读隐藏的共享#

+0

这应该工作。你得到的例外是什么? – 2008-09-26 15:12:15

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

在 登录的用户帐户的上下文中运行的所有进程。如果您想要在另一台计算机上打开文件 ,则您的 应用程序必须在具有权限 的用户上下文中运行,该用户才能在该计算机上打开文件。你可以 与模拟做到这一点。

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

+1

这也是最好的方法,因为它不需要在软件中处理认证(这很容易出错)。 – Luke 2008-09-26 15:30:16

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

如果没有,只要运行该过程的用户访问这些计算机,这会为你工作:

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... 

如果不适合为运行该流程的用户帐户授予共享权限,则此功能非常有用,例如,对于最终用户应用程序需要访问用户本人不应直接访问的共享数据的安全模型。