【问题标题】:Get IIS default installation directory获取IIS默认安装目录
【发布时间】:2013-10-16 23:19:02
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net iis iis-7


    【解决方案1】:

    以下内容仅限于我的经验。 . . 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。

    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\


    【讨论】:

    • 在底部查看我的更新,它实际上还不错。只要该目录仍然存在,您就是黄金(在尝试写入之前进行一些健全性检查。)
    • 不错。感谢您提供注册表项。虽然应该是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\INetStp\PathWWWRoot
    • @ahmd0 不知道我从哪个操作系统获得了该密钥。我通过我的一个盒子上的 reg 搜索找到了它,但它可能是 win 7 或 2008 R2。您正在运行哪个操作系统(如果其他人需要相同的信息可能会有所帮助)? PS:感谢后续!
    • 它应该适用于任何操作系统。只有当 32 位进程(例如 Regedit)在 64 位操作系统上运行时,您的 Wow6432Node 才会出现。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多