【问题标题】:Creating folders using DirectoryEntry使用 DirectoryEntry 创建文件夹
【发布时间】:2009-10-02 15:31:05
【问题描述】:

我正在编写一个 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();
    }
}

【问题讨论】:

    标签: directory directoryentry


    【解决方案1】:

    我认为您不应该为此目的使用 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】:

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

    这有什么问题?您正在访问网络上的非默认资源,默认权限不允许您这样做。这与尝试在网络共享上写入的普通用户帐户非常相似。

    【讨论】:

    • 我对 asp.net 编程并不那么精通,但我认为使用特权帐户运行 asp.net 进程会使我的系统受到可能的攻击,我不希望这样。如果我只能在需要时“获得特权”,我会很高兴。还是我误解了整件事?
    • 我也有点好奇,因为我找不到足够的文档来使用带有 System.DirectoryServices 的 WinNT 提供程序。从逻辑上讲,使用它创建文件夹是可行的
    【解决方案3】:

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

    See documentation at Microsoft

    【讨论】:

    • 是的,当然。这正是整个线程的原因
    猜你喜欢
    • 2012-03-02
    • 2010-10-09
    • 2017-07-14
    • 2015-06-07
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多