比如在机器A上有共享目录Test,设置用户domain\c可以访问并修改。
在客户端,客户登录帐户是domain\d,对\\A\Test没有任何权限,现在需要C#实现指定用户domain\c来访问\\A\Test。不使用映射盘WinAPI:WNetAddConnection2(由于连接时间较长,隐射的话,用户可以从资源管理器里直接访问隐射盘,这样就失去了设置权限的意义)
不使用模拟用户WinAPI:LogonUser(由于域服务器是Windows 2000,且客户端帐户没有SE_TCB_NAME权限,所有无法使用模拟用户方式)谢谢。如果能解决,再加200分。谢谢。

解决方案 »

  1.   

    WNetUseConnection 建立连接
    然后像本地读取那样直接访问 \\pcname\sharename\dir\file.ext
      

  2.   

    用FTP服务了
      

  3.   


    WNetUseConnection 会自动分配个映射盘的样子。我的目的是不让用户能够直接访问局域网资源。
    时间较长的概念是,我需要加载共享目录处的文件,文件可能数百兆,期间外加其他运算。载入时间可能有10-20分钟。这段时间里,如果用映射盘的话,用户就可以在资源管理器里自由操作文件了。我最好是能够有模拟帐户的效果,但由于用户权限不足,无法实现。所以至少,不能让用户直接看到共享目录。
      

  4.   

    WNetAddConnection2,WNetAddConnection3其实不分配localpath就没有隐射盘了。但这样用户可以根据共享目录名访问。最好可以该连接仅限于我的程序可以访问。
      

  5.   

    public static void OpenDirectory(string str_Directory,string to_Directory, string str_UserName, string str_Password)
            {
                string str_LogoOn = "net use " + str_Directory + " /user:" + str_UserName + " \"" + str_Password + "\"";
                string str_OpenDirectory = "start " + str_Directory;            Process p = new Process();
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.RedirectStandardInput = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.FileName = "cmd.exe";
                p.Start();
                p.StandardInput.WriteLine(str_LogoOn);
                p.StandardInput.WriteLine(str_OpenDirectory);
                p.StandardInput.WriteLine("exit");
                p.Close();
                p.Dispose();
                }
    还可使用  WebClient实现相关文件操作
    参考
              
      

  6.   

    我说的WNetUseConnection就是Net Use的API版本。
      

  7.   

    WebClient这个连file://的URI貌似有谱。不过要等周一去实际环境下试试。谢谢了~
      

  8.   

    WebClient也不行,无法遍历文件夹获取文件~哎……
      

  9.   

    一个麻烦点的方法就是自己写个文件传送的服务端程序,放在服务器上运行,你的程序只需要连接到这个程序就可以向它发送命令,传送文件。这种做法甚至不需要在Windows中指定共享文件夹,可以自行由你在程序中设定,需要的,只是在服务器上运行程序的权限,和运行程序的帐户应该具备对相应文件夹的读权限。
      

  10.   

    现在的问题在于,客户是银行。内部安全限制的很严格。
    这也就是为什么为某文件夹开权限但只开给特定虚拟帐号,要使用该文件必须通过制定的软件访问。
    而客户端是不允许任何注册表等操作的。额外开发文件共享程序当然也是不行的,不论是开放FTP服务还是做一个共享文件的server端都不行。现在就是客户说:服务端 我们就这么做了,客户端你们只要遵守我们的要求,怎么实现是你们的事。所以目前的要求就是不额外增加服务器端程序,仅在客户端有限的权限下 实现进程内 对远程共享文件夹的访问(可能多个文件夹,且授权账户不同。)。实在不行就只能WNetAddConnection2不指定映射盘符了
      

  11.   

    你可以CreateProcessAsUser或者impersonation用另一个身份进行文件操作……
      

  12.   

    我开贴就说了,由于与服务器是Win2K,且客户端用户帐号没有SE_TCB_NAME权限,所有不能用CreateProcessAsUser或者impersonation。
      

  13.   

    服务器就是服务器,让他开个你需要的服务吧,如:FTP。