C # - есть ли способ получить локальный путь к FTP-сайту по умолчанию? - PullRequest
0 голосов
/ 06 января 2010

Есть ли способ получить локальный путь к FTP-сайту по умолчанию (в IIS) программно?

Как C: \ program files \ ftproot, показанный ниже:

alt text

Я бы предположил, что это будет что-то вроде:

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

Есть идеи?

Редактировать: это будет для IIS 6.0. Конечно, это должно быть где-то храниться - может быть, в реестре?

Ответы [ 2 ]

2 голосов
/ 06 января 2010

Из того, что я знаю, есть два атрибута Active Directory: msIIS-FTPRoot, msIIS-FTPDir.

С Технет

Обычно домашняя папка пользователя определяется при аутентификации путем запроса атрибутов msIIS-FTPRoot и msIIS-FTPDir объекта пользователя в Active Directory. Конкатенация значений msIIS-FTPRoot и msIIS-FTPDir приводит к пути к домашней папке пользователя.

Пример может выглядеть так:

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

Это приведет к тому, что «D: \ FTP Users \ JohnSmith» станет домашней папкой для пользователя.

Код для обхода всех пользователей и каталогов по умолчанию:

    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();
        }
0 голосов
/ 06 января 2010

Для IIS 6, по крайней мере, я нашел его в реестре здесь:

HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services \ MSFtpsvc \ Параметры \ Виртуальные корни \

Формат данных немного странный - например, D: \ ftproot ,, 1

alt text

...