IIS: wwwroot каталоги IIS с C #? - PullRequest
       0

IIS: wwwroot каталоги IIS с C #?

1 голос
/ 03 ноября 2010

Как я могу получить все (физические) каталоги wwwroot (домашние каталоги) IIS с C # из метабазы ​​IIS?

Ответы [ 2 ]

5 голосов
/ 06 ноября 2010

Если вы используете IIS6:

Необходимо добавить ссылку на System.DirectoryServices в Visual Studio на вкладке Добавить ссылки .NET сборок:

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.

В обоих случаях вам необходимо работать от имени администратора.

2 голосов
/ 03 ноября 2010

Вы можете позвонить на

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

(конечно, используя API для получения нужной папки). И фильтр для " site \" (для сайта по умолчанию "Default Web Site /". Я предполагаю, что для этого есть некоторый API (но, конечно, для более старых версий IIS, это было очень ориентировано на сценарии, поэтому потребовалось бы иметь дело с IDispatch для вызова методов и получения свойств).

Для этого требуется повышенный процесс в IIS7 и 7.5 (если не были делегированы достаточные права на IIS).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...