0

プログラムでデフォルトFTPサイト(IIS内)のローカルパスを取得する方法はありますか?

C:\ program files \ ftprootのように、以下に示します。

代替テキスト

私はそれが次のようなものになると思います:

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

何か案は?

編集:これはIIS6.0用です。確かに、これはどこかに保存する必要があります-おそらくレジストリに?

4

2 に答える 2

2

私の知る限り、Active Directory 属性には、msIIS-FTPRoot と msIIS-FTPDir の 2 つがあります。

Technetから

基本的に、ユーザーのホーム フォルダは、Active Directory 内のユーザー オブジェクトの msIIS-FTPRoot および msIIS-FTPDir 属性を照会することにより、認証時に決定されます。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();
        }
于 2010-01-06T06:13:29.690 に答える
0

少なくとも IIS 6 の場合、次のレジストリで見つけました。

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

データの形式が少し変です - たとえば、D:\ftproot,,1

代替テキスト

于 2010-01-06T06:12:38.840 に答える