Создание папок с использованием DirectoryEntry - PullRequest
1 голос
/ 02 октября 2009

Я пишу приложение 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();
    }
}

Ответы [ 3 ]

0 голосов
/ 02 октября 2009

Я не думаю, что вы должны использовать 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 голосов
/ 12 октября 2009

Класс DirectoryEntry имеет конструктор, который принимает имя пользователя и пароль в качестве входных данных. Вы пробовали это?

См. Документацию в Microsoft

0 голосов
/ 02 октября 2009

Насколько я знаю, у вас есть два варианта: выдать себя за пользователя, у которого есть разрешения на создание каталога на удаленном общем ресурсе, или предоставить разрешения пользователю по умолчанию, который запускает службы asp.net.

Что с этим не так? Вы обращаетесь к ресурсу не по умолчанию в своей сети, и привилегии по умолчанию не позволяют вам это делать. Это похоже на обычную учетную запись пользователя, пытающуюся записать в общий сетевой ресурс.

...