winrom 实现在动配置IIS站点及程序池

原创 2017年06月02日 12:06:44
参考文档:
                    http://www.cnblogs.com/cxd4321/p/4192407.html
                    http://blog.csdn.net/a497785609/article/details/27802685
需导入的命名空间:
                     using System.Security.AccessControl;
                     using Microsoft.Web.Administration;
                     using System.DirectoryServices; 
                     using System.Diagnostics;
                     using System.Management; 


     #region 获取本地IIS版本
        public static void GetIIsVersion()
        {
            try
            {
                DirectoryEntry entry = new DirectoryEntry("IIS://localhost/W3SVC/INFO");
                string version = "本地IIS版本为:IIS" + entry.Properties["MajorIISVersionNumber"].Value.ToString();
                Console.WriteLine(version);
            }
            catch (Exception se)
            {
                Console.WriteLine(se);
            }
        }
        #endregion


     #region 创建应用程序池
        /// <summary>
        /// 创建引用程序池
        /// </summary>
        public static void CreateNewWebSite()
        {
            DirectoryEntry getEntity = new DirectoryEntry("IIS://localhost/W3SVC/INFO");
            int Version = int.Parse(getEntity.Properties["MajorIISVersionNumber"].Value.ToString());
            if (Version > 6)
            {
                string AppPoolName = "LabManager";
                //检测是否存在
                if (!IsAppPoolName(AppPoolName))
                {
                    DirectoryEntry newpool;
                    DirectoryEntry appPools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
                    newpool = appPools.Children.Add(AppPoolName, "IIsApplicationPool");
                    newpool.CommitChanges();
                }
                #region 修改应用程序的配置(包含托管模式及其NET运行版本)
                ServerManager sm = new ServerManager();
                sm.ApplicationPools[AppPoolName].ManagedRuntimeVersion = "v4.0";
                sm.ApplicationPools[AppPoolName].ManagedPipelineMode = ManagedPipelineMode.Classic; //托管模式Integrated为集成 Classic为经典
                sm.CommitChanges();
                #endregion
            }
        }


        #region MyRegion 检测应用程序池是否存在
        private static bool IsAppPoolName(string AppPoolName)
        {
            bool result = false;
            DirectoryEntry appPools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
            //for循环寻找应用程序池下的所有子节点
            foreach (DirectoryEntry getdir in appPools.Children)
            {
                if (getdir.Name.Equals(AppPoolName))
                {
                    result = true;
                    break;
                }
            }
            return result;
        }

        #endregion
       #endregion 

        #region 创建父站点
        public static void CreateFatherWeb()
        {
            DirectoryEntry getdir = new DirectoryEntry("IIS://localhost/W3SVC");
            foreach (DirectoryEntry getentity in getdir.Children)
            {
                if (getentity.SchemaClassName.Equals("IIsWebServer"))
                {
                    foreach (DirectoryEntry getchild in getentity.Children)
                    {
                        if (getchild.SchemaClassName.Equals("IIsWebVirtualDir"))
                        {
                            foreach (DirectoryEntry getsite in getchild.Children)
                            {

                                if (getsite.Name.Equals("bbbb"))
                                {
                                    getsite.DeleteTree();
                                    Console.WriteLine("应用程序已存在!");
                                    Console.WriteLine("执行删除操作!");
                                    Console.WriteLine("删除成功!");
                                    break;
                                }
                            }
                        }
                    }
                }
            }
            string constIISWebSiteRoot = "IIS://localhost/W3SVC/1/ROOT";
            DirectoryEntry root = new DirectoryEntry(constIISWebSiteRoot);
            DirectoryEntry tbEntry = root.Children.Add("bbbb", "IIsWebVirtualDir");
            tbEntry.Properties["Path"][0] = @"C:\inetpub\wwwroot\bbbb";  //虚拟目录物理路径
            tbEntry.Invoke("AppCreate", true);//删除tbEntry.Invoke("AppDelete",true);   tbEntry.CommitChanges();     
            Console.WriteLine("创建成功!");
            //给父站点指定应用程序池名
            //  SetAppToPool("父站点名","Classic .NET AppPool");
        }

        #endregion 


    #region 创建子站点
        public static void CreatChildNewWeb()
        {
            Boolean IsExits = false;
            DirectoryEntry getdir = new DirectoryEntry("IIS://localhost/W3SVC");
            foreach (DirectoryEntry getentity in getdir.Children)
            {
                if (getentity.SchemaClassName.Equals("IIsWebServer"))
                {
                    foreach (DirectoryEntry getchild in getentity.Children)
                    {
                        if (getchild.SchemaClassName.Equals("IIsWebVirtualDir"))
                        {
                            foreach (DirectoryEntry getsite in getchild.Children)
                            {
                                //判断是否存在父站点
                                if (getsite.Name.Equals("ajaxtest"))
                                {
                                    IsExits = true;
                                    //循环父站点
                                    foreach (DirectoryEntry child in getsite.Children)
                                    {
                                        //判断父站点中是否存在子站点
                                        if (child.Name.Equals("aaaaaaa"))
                                        {
                                            Console.WriteLine("存在该子站点!");
                                            Console.WriteLine("执行删除操作!");
                                            child.DeleteTree();
                                            Console.WriteLine("删除成功!");
                                            break;
                                        }
                                    }
                                    //路径格式:C:\inetpub\wwwroot + 站点名 + WebFrame
                                    var url = @"C:\inetpub\wwwroot\ajaxtest\aaaaaaa";
                                    string constIISWebSiteRoot = "IIS://localhost/W3SVC/1/ROOT/ajaxtest";
                                    DirectoryEntry root = new DirectoryEntry(constIISWebSiteRoot);
                                    DirectoryEntry tbEntry = root.Children.Add("aaaaaaa", "IIsWebVirtualDir");
                                    tbEntry.Properties["Path"][0] = url;
                                    tbEntry.Invoke("AppCreate", true);
                                    Console.WriteLine("子站点创建成功!");
                                    //给子站点指定应用程序池名
                                    //  SetAppToPool("子站点名","ASP.NET v4.0 Classic");
                                }
                            }
                        }
                    }
                }
            }
            if (IsExits == false)
            {
                Console.WriteLine("不存在父站点,请先建立父站点");
            }
        } 
        #endregion




   #region 给站点设置应用程序池

        /// <summary>
        /// 给父站点指定应用程序池
        /// </summary>
        /// <param name="appname">站点名</param>
        /// <param name="poolName">应用程序池名</param>

       public static void SetAppToPool(string appname, string poolName)
       {
           //获取目录
           DirectoryEntry getdir = new DirectoryEntry("IIS://localhost/W3SVC");
           foreach (DirectoryEntry getentity in getdir.Children)
           {
               if (getentity.SchemaClassName.Equals("IIsWebServer"))
               {
                   //设置应用程序程序池 先获得应用程序 在设定应用程序程序池
                   //第一次测试根目录
                   foreach (DirectoryEntry getchild in getentity.Children)
                   {
                       if (getchild.SchemaClassName.Equals("IIsWebVirtualDir"))
                       {
                           //找到指定的虚拟目录.
                           foreach (DirectoryEntry getsite in getchild.Children)
                           {
                               if (getsite.Name.Equals(appname))
                               {
                                   //【测试成功通过】
                                   getsite.Properties["AppPoolId"].Value = poolName;
                                   getsite.CommitChanges();
                                   Console.WriteLine("父站点应用程序池设置成功!");
                               }
                           }
                       }
                   }
               }
           }
       }
       

        public static void SetChildAppToPool(string appname, string poolName)
        {
            //获取目录
            DirectoryEntry getdir = new DirectoryEntry("IIS://localhost/W3SVC");
            foreach (DirectoryEntry getentity in getdir.Children)
            {
                if (getentity.SchemaClassName.Equals("IIsWebServer"))
                {
                    //设置应用程序程序池 先获得应用程序 在设定应用程序程序池
                    //第一次测试根目录
                    foreach (DirectoryEntry getchild in getentity.Children)
                    {
                        if (getchild.SchemaClassName.Equals("IIsWebVirtualDir"))
                        {
                            //找到指定的虚拟目录.
                            foreach (DirectoryEntry getsite in getchild.Children)
                            {
                                if (getsite.Name.Equals("ajaxtest"))
                                {

                                    foreach (DirectoryEntry child in getsite.Children)
                                    {
                                        //判断父站点中是否存在子站点
                                        if (child.Name.Equals("aaaaaaa"))
                                        {
                                            //【测试成功通过】
                                            getsite.Properties["AppPoolId"].Value = poolName;
                                            getsite.CommitChanges();
                                            Console.WriteLine("子站点应用程序池设置成功!");
                                        }
                                    }

                                }
                            }
                        }
                    }
                }
            }
        }

        #endregion 
版权声明:本文为博主原创文章,未经博主允许不得转载。

IIS 站点和应用程序池导入导出

Exporting and Importing Sites and App Pools from IIS 7 and 7.5 When using multiple IIS server in a ...
  • loserMAIN
  • loserMAIN
  • 2016年05月17日 12:47
  • 318

C#操作IIS程序池及站点的创建配置实现代码

最近在做一个WEB程序的安装包;对一些操作IIS进行一个简单的总结;主要包括对IIS进行站点的新建以及新建站点的NET版本的选择,还有针对IIS7程序池的托管模式以及版本的操作...
  • li_xiao_ming
  • li_xiao_ming
  • 2014年07月28日 19:48
  • 2034

IIS应用程序池回收图文详解

转:http://blog.sina.com.cn/s/blog_8677fcaa010138uf.html
  • jackljf
  • jackljf
  • 2014年07月09日 08:37
  • 2421

启动/停止/回收IIS站点和应用程序池

在CMD下执行如下命令: IIS站点: 停止站点:  C:\Windows\System32\inetsrv\appcmd.exe stop site “XXXX”  启动站点:  ...
  • lpq374606827
  • lpq374606827
  • 2017年12月27日 15:52
  • 80

工作之杂记--c# 使用wmi to start/stop IIS6 应用程序池和webserver

使用wmi to start/stop IIS6 应用程序池和webserver
  • chen357313771
  • chen357313771
  • 2014年10月13日 16:43
  • 420

如何在IIS7或IIS7.5中导入导出站点及应用程序池

http://www.th7.cn/Program/net/201208/87129.shtml
  • sui84
  • sui84
  • 2013年10月11日 15:51
  • 941

重启 iis 站点 应用池 的批处理

c:cd %windir%\system32\inetsrvappcmd stop apppool /apppool.name:testappcmd start apppool /apppool.na...
  • dyllove98
  • dyllove98
  • 2013年04月12日 22:15
  • 866

IIS应用程序池服务停止如何解决

原文:http://www.cnblogs.com/tangge/p/4193002.html 今天在我的windows7旗舰版上配置iis7 (Internet Information Ser...
  • u013908405
  • u013908405
  • 2016年09月03日 15:53
  • 6770

window7下用IIS建站点及配置

首先我很想吐槽的是,自从用了win7,好多东西找起来真费劲!唉,还是linux好用,好直接! 一.安装IIS 1.打开控制面板--->程序--->程序和功能 进入此页面   2...
  • liuchunhui93
  • liuchunhui93
  • 2014年05月19日 21:00
  • 1833

sharepoint 部署步骤“回收 IIS 应用程序池”中出现错误: 本地 SharePoint 服务器不可用

部署步骤“回收 IIS 应用程序池”中出现错误: 本地 SharePoint 服务器不可用。请检查该服务器是否正在运行并连接到 SharePoint 服务器场。 原因是该用户虽然对SharePoin...
  • cxx2325938
  • cxx2325938
  • 2012年12月09日 11:03
  • 22640
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:winrom 实现在动配置IIS站点及程序池
举报原因:
原因补充:

(最多只允许输入30个字)