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

时间:2016-07-07 19:44:14

标签: c# directory remote-access impersonation

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

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

请帮忙。

1 个答案:

答案 0 :(得分:0)

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

   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方法将正常工作。这可能会留下一个开放的连接(但它不会创建多个连接),但无论如何你可能想创建代码来关闭它,正确处理所有事情等等。这只是一个起点。