C# - 有没有办法获取默认FTP站点的本地路径?

时间:2010-01-06 05:18:15

标签: c# active-directory iis-6 ftp directoryentry

有没有办法以编程方式获取默认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 个答案:

答案 0 :(得分:2)

据我所知,有两个Active Directory属性:msIIS-FTPRoot,msIIS-FTPDir。

来自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();
        }

答案 1 :(得分:0)

至少对于IIS 6,我在注册表中找到了它:

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

数据的格式有点奇怪 - 例如,D:\ ftproot ,, 1

alt text