Как получить физический путь сайта на локальном сервере IIS? (из настольного приложения)
Как получить путь, который обычно выглядит %SystemDrive%\inetpub\wwwroot
?
Я думаю, это как-то связано с Microsoft.Web.Administration.ServerManager
класс, но я не мог найти способ.
Обновление: я пытаюсь получить путь из автономного приложения. Не веб-приложение ASP.NET.
3 ответа
Чтобы узнать физический путь веб-сайта из отдельного приложения, вы можете сделать следующее:
// If IIS7
// Add reference to Microsoft.Web.Administration in
// C:\windows\system32\inetsrv
using Microsoft.Web.Administration;
...
int iisNumber = 2;
using(ServerManager serverManager = new ServerManager())
{
var site = serverManager.Sites.Where(s => s.Id == iisNumber).Single();
var applicationRoot =
site.Applications.Where(a => a.Path == "/").Single();
var virtualRoot =
applicationRoot.VirtualDirectories.Where(v => v.Path == "/").Single();
Console.WriteLine(virtualRoot.PhysicalPath);
}
Если вы используете IIS 6 (или уровень совместимости администрирования IIS6 для IIS7)
// If IIS6
// Add reference to System.DirectoryServices on .NET add ref tab
using System.DirectoryServices;
...
int iisNumber = 2;
string metabasePath = String.Format("IIS://Localhost/W3SVC/{0}/root", iisNumber);
using(DirectoryEntry de = new DirectoryEntry(metabasePath))
{
Console.WriteLine(de.Properties["Path"].Value);
}
Оба эти примера демонстрируют, как найти путь к корню веб-сайта.
Чтобы узнать путь к виртуальному каталогу, вам необходимо изменить пути по мере необходимости.
или же
Request Object Property
PhysicalApplicationPath - возвращает путь к локальной файловой системе виртуального корня для этого приложения. C:\ Inetpub \ Wwwroot \ Webstore
PhysicalPath - возвращает путь локальной файловой системы к текущему сценарию или пути. C:\ Inetpub \ Wwwroot \ Webstore \ админ \paths.aspx
Обновления
Чтобы получить доступ к iis из приложения Windows, пройдите по этой статье: Модификация метабазы IIS в C# (для IIs 6.0,5.0)
Server.MapPath не работает в среде общего хостинга, в этом случае вы можете использовать HostingEnvironment.MapPath.