2010-11-09 44 views
2

通过的Process.Start(路径)访问网络共享,我使用this冒领类冒充域帐户来访问,像这样的网络共享:使用网络凭证

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) 
} 

怀疑该模仿类是有过错的,我试过手动提供凭据的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)是正确的,因为我已经使用之前的身份验证资源连接。

那么,如何使用网络凭证在资源管理器中查看UNC路径?

回答

3

今天我同样的问题,这里是我工作:

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

而不是将uncPath传递到Process.Start,尝试启动Process.Start中的“资源管理器”,并通过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); 
+0

对不起,我忘了提,我已经试过了。谢谢! – Ian 2010-11-09 09:52:16

+0

嗨@Ian,我试着创建一个非常基本的程序来测试代码,它似乎加载正常。我认为这个问题与您的环境有关,您能否提供有关您的操作系统/版本/整体域设置的更多详细信息,以及网络凭证是否存储在本地客户端操作系统保险库中? – 2010-11-09 10:11:23

+0

当然。 Windows 7专业版32位。机器未加入域。 NetworkCredentials对象在运行时被填充。 netcred对象正在用于连接到不同的网络服务,如TFS(正常工作)。该凭证不存储在OS保管库中。 – Ian 2010-11-09 10:37:26