【问题标题】:How to get website's physical path on local IIS server? (from a desktop app)如何在本地 IIS 服务器上获取网站的物理路径? (来自桌面应用程序)
【发布时间】:2010-07-12 13:10:09
【问题描述】:

如何获得通常看起来像 %SystemDrive%\inetpub\wwwroot 的路径?

我猜这与Microsoft.Web.Administration.ServerManager 类有关,但我找不到方法。

更新:我正在尝试从独立应用程序获取路径。不是 ASP.NET 网络应用程序。

【问题讨论】:

  • 您是想从应用程序本身(即 ASP.NET)还是某种独立应用程序中执行此操作?
  • 最好用所有信息正确提问,并像我在回答中所做的那样用粗体标记您的更新
  • 我最近遇到了同样的问题:pmichaels.net/2016/02/26/…

标签: c# iis


【解决方案1】:

要从独立应用程序中发现网站的物理路径,您可以执行以下操作:

// 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(或 IIS7 的 IIS6 管理员兼容层)

// 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);
}

这两个示例都演示了如何发现网站的根路径

要发现虚拟目录的路径,您需要根据需要修改路径。

【讨论】:

  • 如果您的“应用程序”在 SQL CLR 中运行,这将不起作用,因为 Microsoft.Web.Administration.dll 及其无尽的依赖链都没有在 SQL Server 中进行过测试。是否有一些替代的、更基本的方法来查找 Web 应用程序路径或其他功能较少的 DLL?
  • 如何获得,Microsoft.Web.Administration.. 我有 Win7,但我的机器上没有那个 DLL。 Microsoft.Web.Administration.dll。我确实找到了 Microsoft.Web.Administration.Resource.dll,但这不是同一个文件。
  • @Chizl - 在c:\windows\system32\inetsrv 中添加引用时需要浏览到 dll (Microsoft.Web.Administration.dll)。
  • @Triynko - 抱歉,我错过了你的评论。你可以尝试解析c:\windows\system32\inetsrv\config\applicationHost.config。那是 IIS7 存储其设置的地方。它是 XML,使用正确的 XPath 表达式应该不难。查看<sites> 元素,每个网站都有一个<site> 节点。
  • 不确定3年后这是否仍然有效,但有几个用户注意到ServerManager有一个严重的内存链接:msdn.microsoft.com/en-us/library/…
【解决方案2】:

Server.MapPath

Request Object Paths Available

RequestObject 属性

PhysicalApplicationPath - 返回此应用的虚拟根目录的本地文件系统路径。 c:\inetpub\wwwroot\webstore

PhysicalPath - 将本地文件系统路径返​​回到当前脚本或路径。 c:\inetpub\wwwroot\webstore\admin\paths.aspx

更新

要从 Windows 应用程序访问 iis,请阅读这篇文章:Modification of IIS Metabase in C#(适用于 IIs 6.0、5.0)

【讨论】:

  • 我实际上是在尝试从独立的 wpf 应用程序中获取路径。不是网络应用程序。有没有办法使用 Microsoft.Web.Administration 类来获得它?
  • 最好用所有信息正确提问,并像我在回答中所做的那样用粗体标记您的更新
  • Microsoft.Web.Administration.ServerManager 是不是有点赠品? :)
【解决方案3】:

Server.MapPath 在共享主机环境中不工作,这种情况下你可以使用HostingEnvironment.MapPath

【讨论】:

    猜你喜欢
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    相关资源
    最近更新 更多