Pregunta

¿Hay una manera de conseguir la ruta local del sitio FTP predeterminado (en IIS) mediante programación?

Al igual que C: \ Archivos de programa \ ftproot, se muestra a continuación:

alt texto

Me imagino que sería algo como:

DirectoryEntry ftproot = new DirectoryEntry("IIS://localhost/MSFTPSVC/1/Root");
string directory; // = ftproot.something

¿Alguna idea?

Edit: Esto sería para IIS 6.0. Sin duda, esto tiene que ser almacenada en alguna parte - tal vez en el registro

¿Fue útil?

Solución 2

Para IIS 6, al menos, lo encontré en el registro aquí:

HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services \ msftpsvc \ Parameters \ Virtual Roots \

Formato de los datos es un poco extraño - por ejemplo, D: \ ftproot ,, 1

text alt

Otros consejos

Por lo que sé, hay dos atributos de Active Directory:. MsIIS-FTPRoot, msIIS-FTPDir

Technet

Básicamente, la carpeta de inicio del usuario se determina en la autenticación mediante la consulta del msIIS-FTPRoot y msIIS-FTPDir atributos del objeto de usuario en Active Directory. La concatenación de los msIIS-FTPROOT y msIIS-ftpdir valores se obtiene un camino a la carpeta de inicio del usuario.

Un ejemplo puede tener este aspecto:

  msIIS-FTPRoot = D:\FTP Users
  msIIS-FTPDir = \JohnSmith

Esto dará lugar a "D: \ Usuarios \ FTP JohnSmith" como la carpeta de inicio del usuario

.

El código para recorrer todos los usuarios y allí directorios por defecto:

    static void Main(string[] args)
            {            
                string domain = Environment.GetEnvironmentVariable("USERDNSDOMAIN");
                string dc = GetDC(domain);
                string ldap = String.Format("LDAP://{0}/{1}", domain, dc);
                DirectoryEntry e = new DirectoryEntry(ldap);

                DirectorySearcher src = new DirectorySearcher(e, "(objectClass=user)");
                SearchResultCollection res = src.FindAll();
                foreach (SearchResult r in res)
                {
                    DirectoryEntry f = r.GetDirectoryEntry();
                    Console.WriteLine(f.Name + "\t" + f.Properties["msIIS-FTPRoot"].Value + f.Properties["msIIS-FTPDir"].Value);
                }
                Console.ReadKey();
            }

private static string GetDC(string domain)
        {
            StringBuilder sb = new StringBuilder(domain);
            sb.Replace(".", ",DC=");
            sb.Insert(0, "DC=");
            return sb.ToString();
        }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top