IIS:带有C#的IIS的wwwroot目录?

时间:2010-11-03 15:54:05

标签: c# .net iis

如何从IIS元数据库中获取带有C#的IIS的所有(物理)wwwroot目录(主目录)?

2 个答案:

答案 0 :(得分:5)

如果您使用的是IIS6:

您需要在“添加引用.NET程序集”选项卡中的Visual Studio中添加对System.DirectoryServices的引用:

using System;
using System.DirectoryServices;

namespace ListRootAppPathsIIS6
{
  class Program
  {
    static void Main(string[] args)
    {
      using (DirectoryEntry de = new DirectoryEntry("IIS://Localhost/W3SVC"))
      {
        foreach (DirectoryEntry w3svc in de.Children)
        {
          if (w3svc.SchemaClassName == "IIsWebServer")
          {
            string rootPath = 
                String.Format("IIS://Localhost/W3SVC/{0}/root", w3svc.Name);
            using (DirectoryEntry root = new DirectoryEntry(rootPath))
            {
              string info = String.Format("{0} - {1} - {2}", 
                  w3svc.Name, 
                  w3svc.Properties["ServerComment"].Value, 
                  root.Properties["Path"].Value);

              Console.WriteLine(info);
            }
          }
        }
      }

      Console.ReadLine();
    }
  }
}

如果您使用的是IIS7:

添加对C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll

的引用
using System;
using System.Linq;
using Microsoft.Web.Administration;

namespace ListRootAppPathsIIS7
{
  class Program
  {
    static void Main(string[] args)
    {
      using(ServerManager serverManager = new ServerManager())
      {
        foreach (var site in serverManager.Sites)
        {
          var app = site.Applications.Where(a => a.Path == "/").First();
          var vdir = app.VirtualDirectories.Where(v => v.Path == "/").First();
          string info = String.Format("{0} - {1} - {2}", 
              site.Id, 
              site.Name, 
              Environment.ExpandEnvironmentVariables(vdir.PhysicalPath));

          Console.WriteLine(info);
        }
      }
      Console.ReadLine();

    }
  }
}

第一种方法(使用System.Directoryservices)将与IIS7一起使用,前提是您已经安装了IIS6管理兼容性位。

在这两种情况下,您都需要以管理员身份运行。

答案 1 :(得分:2)

你可以打电话给

C:\Windows\system32\inetsrv\appcmd.exe list vdir

(使用API​​来获取正确的文件夹)。并筛选“ site \”(对于默认网站“默认网站/”。我假设有一些API可以执行此操作(但是,对于较旧的IIS版本,这是非常面向脚本的,所以需要处理IDispatch来调用方法和属性获取。

这确实需要在IIS7和7.5上提升进程(除非委派了足够的IIS权限)。