我正在编写一个ASP.NET(C#)应用程序来为我的域创建用户。它还必须在单独的文件服务器上创建文件夹和共享。到目前为止,我已经能够使用
完成我的任务不幸的是,我的ASP.NET应用程序必须通过模拟运行来创建文件夹。我不喜欢那样。我想知道是否有办法使用DirectoryEntry对象在文件服务器上创建文件夹,因为我可以将所需的凭据传递给它的构造函数。或者,有没有办法将凭据传递给Directory.CreateDirectory?
提前致谢。 这是当前的代码,以防万一
strPath = "\\myServer\D$\newDir";
Directory.CreateDirectory(strPath);
using (DirectoryEntry deFS = new DirectoryEntry("WinNT://myServer/lanmanserver"))
{
using (DirectoryEntry deSH = deFS.Children.Add("newDir$", "fileshare"))
{
deSH.Properties["path"].Value = "D:\\newDir";
deSH.Properties["description"].Value = "My Stackoverflow sample share";
deSH.CommitChanges();
}
}
答案 0 :(得分:0)
据我所知,您有两种选择:模拟有权在远程共享上创建目录的用户,或者将权限授予运行asp.net服务的默认用户。
这有什么问题?您正在访问网络上的非默认资源,默认权限不允许您这样做。它非常像试图在网络共享上写入的常规用户帐户。
答案 1 :(得分:0)
我不相信你应该为此目的使用DirectoryObject,它不是为了这样的访问。但是这里有一个技巧可以让你更容易模仿。创建一个模拟器类,它将实现IDisposable,如下所示:
public class Impersonator : IDisposable
{
public Impersonator(userid, password)
{
... LogonUserEx();
... DuplicateToken();
... Impersonate();
}
public void Dispose()
{
... RevertToSelf();
}
}
然后你就可以做到这一点:
using(new Impersonator("myaccount", "password"))
{
... do stuff that requires impersonation
}
答案 2 :(得分:0)
DirectoryEntry类有一个构造函数,它将用户名和密码作为输入。你试过这个吗?