1

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

  • System.IO.Directory.CreateDirectory 创建文件夹,
  • a ("WinNT://fileserver/lanmanserver") DirectoryEntry 创建共享。

不幸的是,我的 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();
    }
}
4

3 回答 3

0

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

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

于 2009-10-02T15:36:50.223 回答
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
}
于 2009-10-02T16:00:32.180 回答
0

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

请参阅 Microsoft 的文档

于 2009-10-12T14:31:15.227 回答