문제

도메인에 있지 않은 컴퓨터에서 실행되는 Windows Forms 앱이있어서 로컬 파일 시스템에서 UNC 경로로 파일을 이동할 수 있어야합니다. 그 길에 대한 사용자 이름과 비밀번호가 있습니다. 나는 실행과 함께 직접 이것을 할 수있는 방법이 있는지 궁금했다. net.exe 명령?

이상적으로는 드라이브를 매핑 할 필요가 없습니다.

도움이 되었습니까?

해결책

이 질문에 대한 대답 여기 조사 할 가치가있는 것 같습니다. Win32 API 기능을 사용하는 것이 좋습니다 WnetUseConnection.

MSDN에서 :

그만큼 WnetUseConnection 함수는 네트워크 리소스에 연결됩니다. 이 기능은 로컬 장치를 네트워크 리소스로 리디렉션 할 수 있습니다.

언급없이 당신이 찾고있는 것을 성취하는 것 같습니다. net.exe. 이것이 도움이됩니까?

다른 팁

WnetAddConnection을 사용하여이를 달성 할 수 있습니다. 당신은 pinvoke해야 할 것입니다. 아래 코드는 Pinvoke 선언을 설정 한 후 저를 위해 작동했습니다. 코드의 두 번째 블록 (아래)에는 Pinvoke 선언이 포함되어 있습니다.


        public static void CopyFile(string from, string shareName, string username, string password)
        {
            NETRESOURCE nr = new NETRESOURCE();
            nr.dwType = ResourceType.RESOURCETYPE_DISK;
            nr.lpLocalName = null;
            nr.lpRemoteName = shareName;
            nr.lpProvider = null;

            int result = WNetAddConnection2(nr,  password,  username, 0);
            System.IO.File.Copy(from, System.IO.Path.Combine(shareName, System.IO.Path.GetFileName(from)));
        }


다음 지원 코드를 클래스 (pinvoke.net에서 가져온)에 붙여 넣어야합니다. 코드에 사용법을 추가하십시오.

using System.Runtime.InteropServices

        [DllImport("Mpr.dll", EntryPoint = "WNetAddConnection2", CallingConvention = CallingConvention.Winapi)]
        private static extern int WNetAddConnection2(NETRESOURCE lpNetResource, string lpPassword,  
                                      string lpUsername, System.UInt32 dwFlags);

        [StructLayout(LayoutKind.Sequential)]
        private class NETRESOURCE
        {
            public ResourceScope dwScope = 0;
            public ResourceType dwType = 0;
            public ResourceDisplayType dwDisplayType = 0;
            public ResourceUsage dwUsage = 0;
            public string lpLocalName = null;
            public string lpRemoteName = null;
            public string lpComment = null;
            public string lpProvider = null;
        };

        public enum ResourceScope
        {
            RESOURCE_CONNECTED = 1,
            RESOURCE_GLOBALNET,
            RESOURCE_REMEMBERED,
            RESOURCE_RECENT,
            RESOURCE_CONTEXT
        };

        public enum ResourceType
        {
            RESOURCETYPE_ANY,
            RESOURCETYPE_DISK,
            RESOURCETYPE_PRINT,
            RESOURCETYPE_RESERVED
        };

        public enum ResourceUsage
        {
            RESOURCEUSAGE_CONNECTABLE = 0x00000001,
            RESOURCEUSAGE_CONTAINER = 0x00000002,
            RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004,
            RESOURCEUSAGE_SIBLING = 0x00000008,
            RESOURCEUSAGE_ATTACHED = 0x00000010,
            RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
        };

        public enum ResourceDisplayType
        {
            RESOURCEDISPLAYTYPE_GENERIC,
            RESOURCEDISPLAYTYPE_DOMAIN,
            RESOURCEDISPLAYTYPE_SERVER,
            RESOURCEDISPLAYTYPE_SHARE,
            RESOURCEDISPLAYTYPE_FILE,
            RESOURCEDISPLAYTYPE_GROUP,
            RESOURCEDISPLAYTYPE_NETWORK,
            RESOURCEDISPLAYTYPE_ROOT,
            RESOURCEDISPLAYTYPE_SHAREADMIN,
            RESOURCEDISPLAYTYPE_DIRECTORY,
            RESOURCEDISPLAYTYPE_TREE,
            RESOURCEDISPLAYTYPE_NDSCONTAINER
        };

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top