internal static Dictionary<string, string> GetVirtualDirectories(SageContext context) { Dictionary<string, string> virtualDirectories = new Dictionary<string, string>(); try { string serverRootPath = context.MapPath("/").ToLower().TrimEnd('\\'); using (DirectoryEntry iis = new DirectoryEntry("IIS://Localhost/w3svc")) { IEnumerable<DirectoryEntry> websites = iis.Children.Cast<DirectoryEntry>() .Where(c => c.SchemaClassName == "IIsWebServer"); foreach (DirectoryEntry website in websites) { using (website) { DirectoryEntry root = website.Children.Find("Root", "IIsWebVirtualDir"); string sitePath = root.Properties["path"].Value.ToString().ToLower().TrimEnd('\\'); if (sitePath == serverRootPath) { virtualDirectories = Project.GetVirtualDirectories(root, string.Empty); break; } } } } } catch (Exception ex) { log.ErrorFormat("Could not retrieve virtual directories in the current application's web server: {0}", ex.Message); } return virtualDirectories; }