【问题标题】:Accessing network share via Process.Start(path) using network credential使用网络凭据通过 Process.Start(path) 访问网络共享
【发布时间】:2010-11-09 09:15:55
【问题描述】:

我正在使用this Impersonator 类来模拟域帐户来访问网络共享,如下所示:

using(new Impersonartor(username, domain, password))
{
//Code Here
}

从网络共享复制文件可以正常工作:

using(new Impersonartor(username, domain, password))
{
 CopyAll(uncPath, localPath)
}

但是,使用 Process.Start 在资源管理器中查看 UNC 共享会引发“登录失败:未知用户名或密码错误”:

using(new Impersonartor(username, domain, password))
{
 Process.Start(uncPath)
}

怀疑 Impersonator 类有问题,我尝试手动向 ProcessStartInfo 提供凭据,如下所示:

                        System.Diagnostics.ProcessStartInfo viewDir = new System.Diagnostics.ProcessStartInfo(uncPath);
                        viewDir.UseShellExecute = false;
                        viewDir.Domain = netCred.Domain;
                        viewDir.UserName = netCred.UserName;
                        viewDir.Password = ConvertToSecureString(netCred.Password);
                        System.Diagnostics.Process.Start(viewDir);

仍然没有快乐。请注意,我确信我的 netCred (NetworkCredential) 是正确的,因为我以前曾连接到经过身份验证的资源。

那么,如何使用网络凭据在 Explorer 中查看 UNC 路径?

【问题讨论】:

    标签: c# process.start networkcredentials


    【解决方案1】:

    我今天遇到了同样的问题,这对我有用:

    private void OpenNetworkPath(string uncPath)
    {
       System.Diagnostics.Process.Start("explorer.exe", uncPath);
    }
    

    【讨论】:

      【解决方案2】:

      不要将uncPath传递给Process.Start,而是尝试在Process.Start中启动“explorer”并将uncPath作为ProcessStartInfoArguments属性传递。

      System.Diagnostics.ProcessStartInfo viewDir = new System.Diagnostics.ProcessStartInfo("explorer.exe");
      viewDir.UseShellExecute = false;
      viewDir.Domain = netCred.Domain;
      viewDir.UserName = netCred.UserName;
      viewDir.Password = ConvertToSecureString(netCred.Password);
      viewDir.Arguments = uncPath;
      System.Diagnostics.Process.Start(viewDir);
      

      【讨论】:

      • 对不起,我忘了说我已经尝试过了。谢谢!
      • 嗨@Ian,我尝试创建一个非常基本的程序来测试代码,它似乎可以正常加载。我认为这个问题与您的环境有关,您能否提供有关您的操作系统/版本/整体域设置的更多详细信息,以及网络凭据是否存储在本地客户端操作系统保险库中?
      • 当然。 Windows 7 专业版 32 位。机器未加入域。在运行时填充 NetworkCredentials 对象。 netcred 对象用于连接到不同的网络服务,例如 TFS(工作正常)。凭据未存储在操作系统保管库中。
      猜你喜欢
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多