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 
版权声明:本文为博主原创文章,未经博主允许不得转载。

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

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

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

首先要对Microsoft.Web.Administration进行引用,它主要是用来操作IIS7;using System.DirectoryServices; using Microsoft.W...

installshiled 创建iis应用程序池和站点

/////////////////////////////////////////////////////////////////////////////// // // // Function:...
  • educast
  • educast
  • 2011年08月07日 14:32
  • 848

IIS+FTP站点配置与管理

  • 2013年07月04日 11:45
  • 1.1MB
  • 下载

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

为实现负载平衡,我们可能会使用多个WEB服务器,也就会需要给多个IIS配置同样的站点和应用程序池.那么我们需要一个一个的重新建吗?当然不用,我们只需要一些简单的命令就可以在IIS7(Windows S...

IIS 相关概念(站点、虚拟目录、应用程序池、隔离模式、W3WP.EXE、Web Gargen) 及 IIS 6的ASP.net请求处理过程

基本概念:1. 站点程序:在IIS中我们所新建的站点,可以为其配置ASP.net以及应用程序池的版本。2. 虚拟目录:用来将不同的文件夹中的内容通过虚拟目录组织到同一个文件夹中,相当于一个应用程序,也...

IIS_6.0_配置Web站点详细介绍.doc

  • 2012年12月21日 14:56
  • 529KB
  • 下载

配置IIS:建立虚拟目录或站点

  • 2011年01月10日 17:15
  • 135KB
  • 下载

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

IIS7或IIS7.5中导入导出站点及应用程序池
  • kan6_8
  • kan6_8
  • 2016年03月22日 16:29
  • 151
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:winrom 实现在动配置IIS站点及程序池
举报原因:
原因补充:

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