同时模拟多个用户
Posted
技术标签:
【中文标题】同时模拟多个用户【英文标题】:impersonate multiple users at the same time 【发布时间】:2015-08-20 08:21:42 【问题描述】:我正在 .net 中创建一项服务,将文件从一个域(域 A)复制到另一个域(域 B) 两个域都需要凭据才能连接到它们,所以我正在使用模拟。
using (new Impersonator(usr_name_source, domain_source, password_source))
模拟每次仅适用于一个域,因此实际上我无法同时模拟两个域以复制文件 所以我正在尝试这个:
using (new Impersonator(usr_name_source, domain_source, password_source))//server authentication
using (new Impersonator(usr_name_target, domain_target, password_target))//server authentication
DeleteOldFiles(targetPath);
Copy(sourcePath, targetPath);
但是当我模仿内部new Impersonator(usr_name_target, domain_target, password_target)
时它不起作用
它忘记了外部模仿。
有没有人知道如何在不映射驱动器等的情况下做到这一点...?
【问题讨论】:
为什么需要做嵌套模拟?正如您发现的那样,您不能同时成为两个用户。为什么不分两步进行操作呢?你不能登录到源目录并在本地复制文件。登录到目标目录并将文件从本地复制到目标? 也许通过创建多个线程...... 是的,我可以,但我在这里谈论的是大文件 - 我不想要中间存储,我想直接从 A 移动到 B。我也更喜欢不使用线程... 【参考方案1】:您一次只能模拟一个用户,因此您当前的解决方案将不起作用。基本上,您正在尝试连接到两个不同的网络资源。您可以 P/Invoke WNetAddConnection2 函数连接到不同域的网络资源并根据需要执行操作。有关 WNetAddConnection2 的详细信息,请参见此处:https://msdn.microsoft.com/en-us/library/windows/desktop/aa385413(v=vs.85).aspx
浏览这篇文章,看看你如何 P/Invoke WNetAddConnection2:How to provide user name and password when connecting to a network share
【讨论】:
感谢 Deepak - 这真的很有帮助!以上是关于同时模拟多个用户的主要内容,如果未能解决你的问题,请参考以下文章