1

据我所知,所有 ASP.NET Web 应用程序C:\inetpub默认都放在文件夹中。但是有没有办法在 C# 代码中检索这个文件夹?还是我只是硬编码?

PS。我需要这个作为安装 Web 应用程序的 C# 程序的默认文件夹。

4

2 回答 2

2

以下仅限于我的经验。. . YMMV

我不相信有一个真正的默认位置。
IIS 将在 IIS 具有访问权限的任何文件夹中托管一个站点。要确定可能是哪个文件夹,您可以查询现有站点列表。


一切都没有丢失。你可以弄清楚这些网站在哪里!

在新的 IIS 安装中,您可以找到在 IIS 安装期间创建的“默认站点”目录。

请记住,没有保证该站点将保留在那里。就个人而言,我一开始配置 IIS 就删除了默认站点。


在 IIS 7+

站点位置可以在 IIS 配置文件夹下的 XML 文件中找到。

%systemroot%\System32\inetsrv\config\

在 XML 文件 applicationHost.config 中看到

XML 节点路径为:/configuration/system.applicationHost/sites/

从那里您可以遍历每个子节点以查看各种文件夹位置。例如,默认站点可能会被列为:

child node:  site name="Default Web Site" id="1"

.Net 方式

另一个技巧是通过 .Net 直接查询 IIS。

这是API文档

以下是一些放在后袋中的方法:

    private static Site GetSite(string siteName)
    {
        Site site = (from s in (new ServerManager().Sites) where s.Name == siteName select s).FirstOrDefault();

        if (site == null)
            throw new Exception("The Web Site Name \"" + siteName + "\" could not be found in IIS!");

        return site;
    }

    private static ApplicationCollection GetApplications(Site site)
    {
        //HttpContext.Current.Trace.Warn("Site ID3: " + site + "/n");

        ApplicationCollection appColl = site.Applications;

        return appColl;
    }

    private static String GetHostName(Site site)
    {
        BindingCollection bindings = site.Bindings;

        String bind = null;

        foreach (Binding binding in bindings)
            if (binding.Host != null)
                return binding.ToString();

        return bind;
    }

更新! 虽然我不能保证安装后这个位置会保留,但您也可以查询注册表

查看 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\InetStp\pathWWWRoot\


于 2013-10-17T00:01:42.517 回答
1

我将此作为单独的答案发布,因为它是一个完全不同的解决方案:

不用担心其他应用程序的安装位置!

  1. 使用Web Deploy(如果您想通过 Web Publish 获得创意,您甚至可以设置特定的文件夹权限

  2. 如果您需要务实地执行此操作/无法访问那些漂亮的工具...
    选择一个位置并设置文件夹的权限以确保 IIS 能够访问它。
    然后使用IIS API注册您的新站点。
    哦,您还需要检查那些应用程序池权限

于 2013-10-17T00:21:27.810 回答