Pregunta

Estoy escribiendo una aplicación ASP.NET (C #) para crear usuarios para mi dominio. También tiene que crear carpetas y recursos compartidos en un servidor de archivos separados. hasta ahora he podido cumplir mi tarea utilizando

  • System.IO.Directory.CreateDirectory para crear las carpetas,
  • A ( "WinNT: // servidor de archivos / lanmanserver"). DirectoryEntry para crear las acciones

Por desgracia, mi aplicación ASP.NET tiene que correr con suplantación de crear la carpeta. No me gusta eso. Me gustaría saber si hay una manera de crear una carpeta en el servidor de archivos utilizando un objeto DirectoryEntry desde que puedo pasar las credenciales necesarias para su constructor. O, alternativamente, ¿hay una manera de pasar las credenciales a Directory.CreateDirectory?

Gracias de antemano. Aquí está el código actual, por si acaso

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

Solución

No creo que usted debe utilizar DirectoryObject para tal fin, que no fue hecho para dicho acceso. Pero aquí hay un truco que podría utilizar para hacer más fácil la suplantación. Crear una clase de imitador, que implementaría IDisposable, algo como esto:

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

, entonces sería capaz de hacer esto:

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

Otros consejos

Por lo que yo sé, tiene dos opciones: hacerse pasar por un usuario que tiene permisos para crear el directorio en el recurso compartido remoto o dar los permisos para el usuario por defecto que se ejecuta servicios ASP.NET

.

¿Qué hay de malo en eso? Usted está accediendo a un recurso no por defecto en su red y los privilegios por defecto no te permite hacer eso. Es más o menos como una cuenta de usuario que intenta escribir en un recurso compartido de red.

La clase tiene un constructor DirectoryEntry que toman nombre de usuario y contraseña como entrada. ¿Has probado esto?

Consulte la documentación de Microsoft

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top