使用 c# 从另一个域访问远程目录

Posted

技术标签:

【中文标题】使用 c# 从另一个域访问远程目录【英文标题】:Access remote directory from another domain with c# 【发布时间】:2016-07-07 19:44:13 【问题描述】:

我需要访问从另一个域中找到的以下目录到我的 c# 程序中。我该如何进行?我应该使用 Impersonate 方法吗?

string[] files = Directory.GetFiles(@"\\testweb\folder\test", "*.txt");

请帮忙。

【问题讨论】:

【参考方案1】:

在执行此操作之前,您需要以编程方式(如果您想解决此问题)使用适当的用户创建与域的连接。您可以使用此类:

   public class MprWrapper
    
        [DllImport("Mpr.dll")]
        private static extern int WNetUseConnection(
            IntPtr hwndOwner,
            _NETRESOURCE lpNetResource,
            string lpPassword,
            string lpUserID,
            int dwFlags,
            string lpAccessName,
            string lpBufferSize,
            string lpResult
            );

        struct _NETRESOURCE
        
            public int dwScope;
            public int dwType;
            public int dwDisplayType;
            public int dwUsage;
            public string lpLocalName;
            public string lpRemoteName;
            public string lpComment;
            public string lpProvider;
        


        public static void WNetUseConnection(string remoteName, string user, string pass)
        
            _NETRESOURCE myStruct = new _NETRESOURCE
            
                dwType = 1, //it's a disk (0 is any, 2 is printer)
                lpRemoteName = remoteName
            ;

            int error = WNetUseConnection(new IntPtr(0), myStruct, pass, user, 0, null, null, null);
            if (error != 0)
            
                throw new Exception("That didn't work either");
            
            // if we reach here then everything worked!!!
        
    

你与

 MprWrapper.WNetUseConnection(@"\\DomainAddressHere", @"Domain\User", "Password1");

那么你的 getfiles 方法就可以正常工作了。这可能会留下一个打开的连接(但它不会创建多个),但无论如何您可能想要创建代码来关闭它、正确处理所有内容等。这只是一个起点。

【讨论】:

我应该在哪里创建这个连接? @velvt 在调用方法之前

以上是关于使用 c# 从另一个域访问远程目录的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个 Ubuntu 服务器访问远程 MySQL 数据库?

从另一个 wordpress 远程数据库中提取用户并显示

从扩展中使用 AJAX 访问远程域

通过 C# 访问远程 COM 对象

将远程 ssh 连接到 pc... pc 连接 ***

从 C# 访问 Sharepoint 远程文件夹