如题,在winform客户端访问可在外网访问的服务器共享文件夹,如果共享文件夹的访问权限都放开的话,匿名访问时可以的,现在想在次基础上实现通过用户名和密码访问,怎么去实现?
1、wmi
我查了些资料,说wmi可以做,试了一下总是报连接异常:rpc服务器不可用;而连接本地时则报:无法获取本地用户凭证;望各位解答!
2、映射网络硬盘
不知还有没有其他的方式呢?希望各位能给小弟关于这方面的比较全面的上一课,谢谢。

解决方案 »

  1.   

    刚才网把wmi部分的包异常的代码贴出来了,异常代码如下:
    ConnectionOptions options = new ConnectionOptions();
    options.Username = "huang";//UserName; //could be in domain\user format
    options.Password = "1234";//SecurelyStoredPassword;
    ManagementScope scope = new ManagementScope("\\\\huang\\root\\cimv2",options);//"\\\\servername\\root\\cimv2",options);
    try
    {
    scope.Connect();
    ManagementObject disk = new ManagementObject(scope,new ManagementPath("Win32_logicaldisk='c:'"),null);
    disk.Get();
    }
    catch (Exception ex) 
    {
    Console.WriteLine("Failed to connect: " + ex.Message);
    }
      

  2.   

    to 2、映射网络硬盘
    不知还有没有其他的方式呢?希望各位能给小弟关于这方面的比较全面的上一课,谢谢。ref:
    http://blog.csdn.net/knight94/archive/2006/03/21/631309.aspx
      

  3.   

    感谢Knight94(愚翁)的支持,您的blog我已看过,正在研究,谢谢!
      

  4.   

    刚才试了一下那段代码,没有实现,下面是我的代码:
    string yourNetworkPath = ConfigurationSettings.AppSettings["yourNetworkPath"];
    if(yourNetworkPath == "")
    {
    yourNetworkPath = this.textBox1.Text.Trim();
    }
    string pwd = ConfigurationSettings.AppSettings["pwd"];
    string username = ConfigurationSettings.AppSettings["username"];
    string yourNetDriveName = ConfigurationSettings.AppSettings["yourNetDriveName"];NETRESOURCE myNetResource = new NETRESOURCE();        myNetResource.dwScope = 2;       //2:RESOURCE_GLOBALNET            myNetResource.dwType = 1 ;       //1:RESOURCETYPE_ANY             myNetResource.dwDisplayType = 3; //3:RESOURCEDISPLAYTYPE_GENERIC           myNetResource.dwUsage = 1;       //1: RESOURCEUSAGE_CONNECTABLE     myNetResource.LocalName = yourNetDriveName;        myNetResource.RemoteName = yourNetworkPath;        myNetResource.Provider = null;        uint nretAdd = WNetAddConnection2( myNetResource, pwd, username, 0);//注意:如果正确,返回值是0;否则错误。//删除映射网络驱动器调用的代码如下://uint nretDel = WNetCancelConnection2( yourNetDriveName, 1, true);

    string[] files1 = Directory.GetFiles(yourNetworkPath);if(File.Exists(@"T:\vss\users.txt"))
    {
       FileInfo file = new FileInfo(@"T:\vss\users.txt");}
    nretAdd 的返回值是1219,并不时代表正确的0,可以解释一下么?
      

  5.   

    to 
    myNetResource.LocalName = yourNetDriveName;
    myNetResource.RemoteName = yourNetworkPath; 这两个具体的值是什么
      

  6.   

    myNetResource.LocalName = yourNetDriveName;//映射到本地的盘符
    myNetResource.RemoteName = yourNetworkPath; //需要映射的共享文件夹的地址