比如在机器A上有共享目录Test,设置用户domain\c可以访问并修改。
在客户端,客户登录帐户是domain\d,对\\A\Test没有任何权限,现在需要C#实现指定用户domain\c来访问\\A\Test。不使用映射盘WinAPI:WNetAddConnection2(由于连接时间较长,隐射的话,用户可以从资源管理器里直接访问隐射盘,这样就失去了设置权限的意义)
不使用模拟用户WinAPI:LogonUser(由于域服务器是Windows 2000,且客户端帐户没有SE_TCB_NAME权限,所有无法使用模拟用户方式)谢谢。如果能解决,再加200分。谢谢。
在客户端,客户登录帐户是domain\d,对\\A\Test没有任何权限,现在需要C#实现指定用户domain\c来访问\\A\Test。不使用映射盘WinAPI:WNetAddConnection2(由于连接时间较长,隐射的话,用户可以从资源管理器里直接访问隐射盘,这样就失去了设置权限的意义)
不使用模拟用户WinAPI:LogonUser(由于域服务器是Windows 2000,且客户端帐户没有SE_TCB_NAME权限,所有无法使用模拟用户方式)谢谢。如果能解决,再加200分。谢谢。
然后像本地读取那样直接访问 \\pcname\sharename\dir\file.ext
WNetUseConnection 会自动分配个映射盘的样子。我的目的是不让用户能够直接访问局域网资源。
时间较长的概念是,我需要加载共享目录处的文件,文件可能数百兆,期间外加其他运算。载入时间可能有10-20分钟。这段时间里,如果用映射盘的话,用户就可以在资源管理器里自由操作文件了。我最好是能够有模拟帐户的效果,但由于用户权限不足,无法实现。所以至少,不能让用户直接看到共享目录。
{
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实现相关文件操作
参考
这也就是为什么为某文件夹开权限但只开给特定虚拟帐号,要使用该文件必须通过制定的软件访问。
而客户端是不允许任何注册表等操作的。额外开发文件共享程序当然也是不行的,不论是开放FTP服务还是做一个共享文件的server端都不行。现在就是客户说:服务端 我们就这么做了,客户端你们只要遵守我们的要求,怎么实现是你们的事。所以目前的要求就是不额外增加服务器端程序,仅在客户端有限的权限下 实现进程内 对远程共享文件夹的访问(可能多个文件夹,且授权账户不同。)。实在不行就只能WNetAddConnection2不指定映射盘符了