【问题标题】:Reading hidden share in C#在 C# 中读取隐藏共享
【发布时间】:2010-09-13 11:56:34
【问题描述】:

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

【问题讨论】:

  • 这应该可以。您遇到什么异常?

标签: c# impersonation fileshare


【解决方案1】:

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

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

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

【讨论】:

  • 这也是最好的方法,因为它将消除在您的软件中处理身份验证的需要(这很容易出错)。
【解决方案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...

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

【讨论】:

    【解决方案3】:

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

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

    DirectoryInfo di = new DirectoryInfo(@"\\machineName\c$\temp");
    
    FileInfo[] files = di.GetFiles();
    
    foreach (FileInfo f in files)
    {
        Debug.WriteLine(f.Name);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多