获取IIS默认安装目录

时间:2013-10-16 23:19:03

标签: c# .net iis iis-7

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

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

2 个答案:

答案 0 :(得分:2)

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

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


但是

一切都不会丢失。你可以弄清楚这些网站的位置!

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

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


在IIS 7 +

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

%SYSTEMROOT%\ SYSTEM32 \ INETSRV \设置\

在XML文件applicationHost.config中看到

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

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

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

.Net Way

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

Here is the API documentation

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

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

更新! 虽然我无法保证在安装后此位置仍然存在,但您也可以query the registry

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


答案 1 :(得分:1)

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

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

  1. 使用Web Deploy(如果您通过网络发布获得创意,您甚至可以set specific folder permissions

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