7

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

4

3 回答 3

6

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

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

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

于 2008-09-26T15:13:25.603 回答
2

要使用运行该进程的用户无权访问的共享进行身份验证(管理共享通常是这种情况),请尝试运行 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...

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

于 2008-09-26T15:43:48.090 回答
0

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

如果没有,只要运行该进程的用户有权访问这些机器,这将对您有用:

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

FileInfo[] files = di.GetFiles();

foreach (FileInfo f in files)
{
    Debug.WriteLine(f.Name);
}
于 2008-09-26T15:16:39.933 回答