كيف يمكنني الوصول إلى مشاركة ملف برمجيا [مكررة]

StackOverflow https://stackoverflow.com/questions/1441406

سؤال

لدي ويندوز أشكال التطبيق قيد التشغيل على جهاز ليس في المجال الذي يحتاج إلى أن يكون قادرا على نقل ملف من الملفات المحلية إلى مسار UNC.لدي المستخدم وكلمة المرور على هذا الطريق.كنت أتساءل هل هناك أي طريقة للقيام بذلك مباشرة مع execing على net.exe الأمر ؟

من الناحية المثالية لا يجب أن تعيين محرك أقراص.

هل كانت مفيدة؟

المحلول

تقبل الإجابة على هذا السؤال هنا يبدو أنه سوف يكون من المفيد النظر الى ؛ فإنه يشير إلى استخدام الدالة Win32 API WNetUseConnection.

من MSDN:

على WNetUseConnection وظيفة يجعل الاتصال إلى موارد شبكة الاتصال.على وظيفة يمكن إعادة توجيه جهاز محلي إلى موارد شبكة الاتصال.

الذي يبدو لإنجاز ما كنت تبحث عن ، مع عدم ذكر net.exe.هل هذه مساعدة ؟

نصائح أخرى

يمكنك استخدام WNetAddConnection لإنجاز هذا.سيكون عليك أن تستدعي.لقد نجح الكود أدناه بعد أن قمت بإعداد إعلانات pInvoc.تحتوي الكتلة الثانية من التعليمات البرمجية (أدناه) على إعلانات pInvoc - ما عليك سوى لصقها داخل الفصل الدراسي.


        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)));
        }


سوف تحتاج إلى لصق التعليمات البرمجية الداعمة التالية في فئة (مأخوذة من pInvoc.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