Pergunta

Eu estou escrevendo uma aplicação ASP.NET (C #) para criar usuários para o meu domínio. Ele também tem de criar pastas e compartilhamentos em um servidor de arquivo separado. Eu até agora têm sido capazes de realizar minha tarefa usando

  • System.IO.Directory.CreateDirectory para criar as pastas,
  • A ( "WinNT: // servidor de arquivos / lanmanserver"). DirectoryEntry para criar as ações

Infelizmente, a minha aplicação ASP.NET tem de correr com representação no para criar a pasta. Eu não gosto disso. Gostaria de saber se existe uma maneira de criar uma pasta no servidor de arquivos usando um objeto DirectoryEntry desde que eu possa passar as credenciais necessárias para seu construtor. Ou, alternativamente, existe uma maneira de passar credenciais para Directory.CreateDirectory?

Obrigado antecipadamente. Aqui está o código atual, apenas no caso

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();
    }
}
Foi útil?

Solução

Eu não acredito que você deve estar usando DirectoryObject para o efeito, não foi feito para tal acesso. Mas aqui está um truque que você poderia estar usando para fazer a representação mais fácil. Criar uma classe imitador, que iria implementar IDisposable, algo como isto:

public class Impersonator : IDisposable
{
    public Impersonator(userid, password) 
    {
        ... LogonUserEx();
        ... DuplicateToken();
        ... Impersonate();
    }
    public void Dispose()
    {
        ... RevertToSelf();
    }
}

então você seria capaz de fazer isso:

using(new Impersonator("myaccount", "password"))
{
     ... do stuff that requires impersonation
}

Outras dicas

Tanto quanto eu sei que você tem duas opções: representar um usuário que tenha permissões para criar o diretório no compartilhamento remoto ou dar as permissões para o usuário padrão que corre asp.net serviços

.

O que está errado com isso? Você está acessando um recurso não-padrão em sua rede e os privilégios padrão não permitem que você faça isso. É praticamente como uma conta de usuário regular tentando escrever em um compartilhamento de rede.

A classe DirectoryEntry tem um construtor que levam nome de usuário e senha como entrada. Você já tentou isso?

Consulte a documentação da Microsoft

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top