使用DirectoryEntry创建文件夹

使用DirectoryEntry创建文件夹,directory,directoryentry,Directory,Directoryentry,我正在编写一个ASP.NET(C#)应用程序来为我的域创建用户。它还必须在单独的文件服务器上创建文件夹和共享。到目前为止,我已经能够使用 System.IO.Directory.CreateDirectory创建文件夹 创建共享的(“WinNT://fileserver/lanmanserver”)目录条目 不幸的是,我的ASP.NET应用程序必须在启用模拟的情况下运行才能创建文件夹。我不喜欢那样。我想知道是否有办法使用DirectoryEntry对象在文件服务器上创建文件夹,因为我可以将所

我正在编写一个ASP.NET(C#)应用程序来为我的域创建用户。它还必须在单独的文件服务器上创建文件夹和共享。到目前为止,我已经能够使用

  • System.IO.Directory.CreateDirectory创建文件夹
  • 创建共享的(“WinNT://fileserver/lanmanserver”)目录条目
不幸的是,我的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();
    }
}

据我所知,您有两个选项:模拟有权在远程共享上创建目录的用户,或将权限授予运行asp.net服务的默认用户


这有什么不对?您正在访问网络上的非默认资源,默认权限不允许您这样做。这很像一个普通用户帐户试图在网络共享上写东西。

我认为你不应该为此目的使用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
}

DirectoryEntry类有一个以用户名和密码作为输入的构造函数。你试过这个吗


我并不精通asp.net编程,但我认为使用特权帐户运行asp.net进程会使我的系统受到可能的攻击,我不希望这样。如果我只有在需要的时候才能“享受特权”,我会很高兴的。还是我误解了整个事情?我也有点好奇,因为我找不到足够的文档来说明如何将WinNT provider与System.DirectoryServices一起使用。从逻辑上讲,使用它创建文件夹似乎是可行的。非常感谢。这个解决方案对我很有用。看起来我有一些关于模仿细节的阅读。当然有。这正是整条线的原因