2009-10-02 38 views
1

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

  • System.IO.Directory.CreateDirectory创建的文件夹来完成我的任务,
  • 一个(“WINNT://文件服务器/ 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(); 
    } 
} 

回答

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 
} 
+0

非常感谢您创建一个文件夹。这个解决方案将为我服务。 看起来我有一些阅读模仿的细节。 – birukw 2009-10-02 16:15:31

0

据我知道你有两种选择:模拟一个具有权限来创建远程共享目录或给予的权限设置为默认用户,用户是运行asp.net服务。

那有什么问题?您正在访问网络上的非默认资源,并且默认权限不允许您这样做。这几乎就像试图在网络共享上写入的常规用户帐户。

+0

我并不精通于asp.net编程,但我认为有一个特权帐户运行asp.net进程打开我的系统可能的攻击,我不希望出现这种情况。如果我只有在需要时才能“享有特权”,它会喜欢它。或者我误解了整件事情? – birukw 2009-10-02 15:42:21

+0

我也很好奇,因为我找不到有关使用WinNT提供程序与System.DirectoryServices足够的文档。从逻辑上讲,使用 – birukw 2009-10-02 15:44:47

0

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

See documentation at Microsoft

+0

yes ofcourse。这正是整个线程的原因 – birukw 2009-10-13 10:06:54