2010-07-07 75 views
0

当我使用:如何从要求身份验证的计算机上将文件复制到本地计算机?

File.Copy(strRemoteFolder, strLocalFolder) 

我得到以下消息的UnauthorizedAccessException:“访问路径...被拒绝。”

在.NET中,如何从要求身份验证的远程计算机将文件复制到本地计算机?我知道我需要以某种方式提供用户名和密码,但我不知道如何通过.NET中的API提供该信息。

+0

下面你注意,你有不同的域,不能提供跨域的凭证。你有远程PC的控制权吗? – 2010-07-07 21:28:39

+0

@Tim我们可以控制远程PC,但我认为出于安全考虑,我们无法创建允许跨域访问的策略。 – 2010-07-08 12:36:58

回答

0

调整目标系统上的共享权限以允许访问。

+0

我特别需要.NET中的解决方案。目标机器位于不同的域上,我们无法在不同域之间提供凭据。 – 2010-07-07 21:23:16

+0

这不会使答案无效。否则你可以写一个程序并从任何其他机器获取任何受保护的数据。不太可能发生。 – Randy 2010-07-07 21:24:19

0

如果不进行身份验证,您将无法复制受保护服务器中的文件。

1

可以使用非托管LogonUser函数来得到一个帐户令牌在远程计算机上的会话,然后调用WindowsIdentity.Impersonate使用该会话。 WindowsIdentity.Impersonate上的MSDN页面描述了如何对LogonUser进行p/invoke调用。

您可能无法使用File.Copy,因为您无法访问本地计算机,但可以拨打File.OpenRead打开远程文件,然后恢复您的令牌。事情是这样的:

[DllImport("advapi32.dll")] 
public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken); 
[DllImport("kernel32.dll")] 
public static extern bool CloseHandle(IntPtr hObject); 

public static Stream OpenFileWithAccount(string filename, string username, string domain, string password) 
{ 
    IntPtr token; 
    if (!LogonUser(username, domain, password, 2, 0, out token)) 
    { 
     throw new Win32Exception(); 
    } 
    try 
    { 
     using (WindowsIdentity.Impersonate(token)) 
     { 
      return File.OpenRead(filename); 
     } 
    } 
    finally 
    { 
     CloseHandle(token); 
    } 
} 
+0

也许你以错误的顺序得到了方法调用的参数? - >(用户名,域名,密码....)在宣言 – MaLio 2010-07-08 00:51:27

+1

@MaLio:你说得对,我做到了。谢谢你的收获! – Quartermeister 2010-07-08 03:32:33

+0

订单错在哪里?我找不到这个。帮我。调用LogUser方法时出错。 – AT07 2012-09-04 07:18:37

1

的建议使用LogonUser登录远程计算机上是明确错误。您应使用WNetAddConnection2NetUseAdd参数级别2(USE_INFO_2)本机API进行远程登录。

0

由于您可以控制两台机器,因此可以在两台机器上创建具有匹配密码的本地用户,然后以该用户身份运行程序。

或者您可以在远程计算机上创建用户,并使用该用户的用户名/密码将驱动器映射到该计算机。您将指定用户为RemoteServer\NewUser。所以你参考here的净使用将是use s: \\remoteserver\share /USER:RemoteServer\NewUser password。然后再打电话网,但通过use s: /delete清理...

(这里假设你已经正确配置,用户能够访问有关具体份额/文件夹。)

相关问题