C#访问远程共享加锁文件夹

本文提供了两种使用C#实现远程资源连接的方法。第一种方法通过调用Windows API进行网络资源连接和断开,第二种方法则利用WMI(Windows Management Instrumentation)实现服务器资源的连接。这两种方式都详细展示了如何配置连接参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种:

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace ManageCenter
{
    public  class ConnShareRes
    {
        private string userName;
        private string userPwd;
        private string shareResDictionary;
        //构造函数
        public ConnShareRes(string myUserName, string myUserPwd, string myShareResDictionary)
        {
            this.userName = myUserName;
            this.userPwd = myUserPwd;
            this.shareResDictionary = myShareResDictionary;
        }
        [StructLayout(LayoutKind.Sequential)]
        public struct NETRESOURCEA
        {
            public int dwScope;
            public int dwType;
            public int dwDisplayType;
            public int dwUsage;
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpLocalName;
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpRemoteName;
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpComment;
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpProvider;
            public override String ToString()
            {
                String str = "LocalName: " + lpLocalName + " RemoteName: " + lpRemoteName + " Comment: " + lpComment + " lpProvider: " + lpProvider;
                return (str);
            }
        }
        [DllImport("mpr.dll")]
        public static extern int WNetAddConnection2([MarshalAs(UnmanagedType.LPArray)] NETRESOURCEA[] lpNetResource, [MarshalAs(UnmanagedType.LPStr)] string lpPassword, [MarshalAs(UnmanagedType.LPStr)] string UserName, int dwFlags);
        [DllImport("mpr.dll")]
        public static extern int WNetCancelConnection2(string lpName, int dwFlags, bool fForce);
        //开始远程连接
        public  bool RemoteConnect(bool bConnected)
        {
            int res;
            NETRESOURCEA[] n = new NETRESOURCEA[1];
            n[0] = new NETRESOURCEA();
            n[0].dwType = 1;
            int dwFlags = 1; // CONNECT_INTERACTIVE;
            //n[0].lpLocalName = @"X:";
            n[0].lpLocalName = @"";

            n[0].lpRemoteName = shareResDictionary;
            //n[0].lpRemoteName = @"";
            n[0].lpProvider = null;
            //Console.WriteLine(n[0]);
            if (bConnected)
            {
                res = WNetAddConnection2(n, userPwd, userName, dwFlags);
            }
            else
            {
                res=WNetCancelConnection2(shareResDictionary, 1, true);
            }
            return (res == 0) ? true : false;
        }
    }//class
}//namespace

 

第二种:

 using   System;   
   using   System.Management;   
    
  class   Sample_ConnectionOptions   
  {   
          public   static   int   Main(string[]   args)   {   
                  ConnectionOptions   options   =   new   ConnectionOptions();   
                  options.Username   =   用户名;   //could   be   in   domain\user   format   
                  options.Password   =   密码;   
                  ManagementScope   scope   =   new   ManagementScope(   
                          "\\\\servername\\root\\cimv2",   
                          options);   
                  try   {   
                          scope.Connect();   
                          ManagementObject   disk   =   new   ManagementObject(   
                                  scope,   
                                  new   ManagementPath("Win32_logicaldisk='c:'"),   
                                  null);   
                          disk.Get();   
                  }   
                  catch   (Exception   e)   {   
                          Console.WriteLine("Failed   to   connect:   "   +   e.Message);   
                  }   
                  return   0;   
          }   
  }

转载于:https://www.cnblogs.com/zuowj/archive/2013/05/11/3072724.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值