3

我正在使用这个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 路径?

4

2 回答 2

3

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

private void OpenNetworkPath(string uncPath)
{
   System.Diagnostics.Process.Start("explorer.exe", uncPath);
}
于 2011-03-02T15:47:27.947 回答
0

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

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);
于 2010-11-09T09:48:07.887 回答