C# 操作IIS方法集合

简介: C# 操作IIS方法集合

如果在win8,win7情况下报错:未知错误(0x80005000)

http://blog.csdn.net/ts1030746080/article/details/8741399

using System;

using System.Collections;

using System.Collections.Generic;

using System.DirectoryServices;

using System.Linq;

using System.Net;

using System.Text;

using System.Threading.Tasks;


namespace IISControlHelper

{

    ///   <summary>

    ///  IIS 操作方法集合

    ///   http://blog.csdn.net/ts1030746080/article/details/8741399  错误

    ///   </summary>     public  class IISWorker

   {

        private  static  string HostName =  " localhost ";


        ///   <summary>

        ///  获取本地IIS版本

        ///   </summary>

        ///   <returns></returns>         public  static  string GetIIsVersion()

       {

            try

           {

               DirectoryEntry entry =  new DirectoryEntry( " IIS:// " + HostName +  " /W3SVC/INFO ");

                string version = entry.Properties[ " MajorIISVersionNumber "].Value.ToString();

                return version;

           }

            catch (Exception se)

           {

                // 说明一点:IIS5.0中没有(int)entry.Properties["MajorIISVersionNumber"].Value;属性,将抛出异常 证明版本为 5.0                 return  string.Empty;

           }

       }


        ///   <summary>

        ///  创建虚拟目录网站

        ///   </summary>

        ///   <param name="webSiteName"> 网站名称 </param>

        ///   <param name="physicalPath"> 物理路径 </param>

        ///   <param name="domainPort"> 站点+端口,如192.168.1.23:90 </param>

        ///   <param name="isCreateAppPool"> 是否创建新的应用程序池 </param>

        ///   <returns></returns>         public  static  int CreateWebSite( string webSiteName,  string physicalPath,  string domainPort, bool isCreateAppPool)

       {

           DirectoryEntry root =  new DirectoryEntry( " IIS:// " + HostName +  " /W3SVC ");

            //  为新WEB站点查找一个未使用的ID             int siteID =  1;

            foreach (DirectoryEntry e  in root.Children)

           {

                if (e.SchemaClassName ==  " IIsWebServer ")

               {

                    int ID = Convert.ToInt32(e.Name);

                    if (ID >= siteID) { siteID = ID +  1; }

               }

           }

            //  创建WEB站点            DirectoryEntry site = (DirectoryEntry)root.Invoke( " Create ",  " IIsWebServer ", siteID);

           site.Invoke( " Put ",  " ServerComment ", webSiteName);

           site.Invoke( " Put ",  " KeyType ",  " IIsWebServer ");

           site.Invoke( " Put ",  " ServerBindings ", domainPort +  " : ");

           site.Invoke( " Put ",  " ServerState ",  2);

           site.Invoke( " Put ",  " FrontPageWeb ",  1);

           site.Invoke( " Put ",  " DefaultDoc ",  " Default.html ");

            //  site.Invoke("Put", "SecureBindings", ":443:");            site.Invoke( " Put ",  " ServerAutoStart ",  1);

           site.Invoke( " Put ",  " ServerSize ",  1);

           site.Invoke( " SetInfo ");

            //  创建应用程序虚拟目录

           DirectoryEntry siteVDir = site.Children.Add( " Root ",  " IISWebVirtualDir ");

           siteVDir.Properties[ " AppIsolated "][ 0] =  2;

           siteVDir.Properties[ " Path "][ 0] = physicalPath;

           siteVDir.Properties[ " AccessFlags "][ 0] =  513;

           siteVDir.Properties[ " FrontPageWeb "][ 0] =  1;

           siteVDir.Properties[ " AppRoot "][ 0] =  " LM/W3SVC/ " + siteID +  " /Root ";

           siteVDir.Properties[ " AppFriendlyName "][ 0] =  " Root ";


            if (isCreateAppPool)

           {

               DirectoryEntry apppools =  new DirectoryEntry( " IIS:// " + HostName +  " /W3SVC/AppPools ");


               DirectoryEntry newpool = apppools.Children.Add(webSiteName,  " IIsApplicationPool ");

               newpool.Properties[ " AppPoolIdentityType "][ 0] =  " 4 ";  // 4                newpool.Properties[ " ManagedPipelineMode "][ 0] =  " 0 ";  // 0:集成模式 1:经典模式                newpool.CommitChanges();

               siteVDir.Properties[ " AppPoolId "][ 0] = webSiteName;

           }


           siteVDir.CommitChanges();

           site.CommitChanges();

            return siteID;

       }


        ///   <summary>

        ///  得到网站的物理路径

        ///   </summary>

        ///   <param name="rootEntry"> 网站节点 </param>

        ///   <returns></returns>         public  static  string GetWebsitePhysicalPath(DirectoryEntry rootEntry)

       {

            string physicalPath =  "";

            foreach (DirectoryEntry childEntry  in rootEntry.Children)

           {

                if ((childEntry.SchemaClassName ==  " IIsWebVirtualDir ") && (childEntry.Name.ToLower() ==  " root "))

               {

                    if (childEntry.Properties[ " Path "].Value !=  null)

                   {

                       physicalPath = childEntry.Properties[ " Path "].Value.ToString();

                   }

                    else

                   {

                       physicalPath =  "";

                   }

               }

           }

            return physicalPath;

       }


        ///   <summary>

        ///  获取站点名

        ///   </summary>         public  static List<IISInfo> GetServerBindings()

       {

           List<IISInfo> iisList =  new List<IISInfo>();

            string entPath = String.Format( " IIS://{0}/w3svc ", HostName);

           DirectoryEntry ent =  new DirectoryEntry(entPath);

            foreach (DirectoryEntry child  in ent.Children)

           {

                if (child.SchemaClassName.Equals( " IIsWebServer ", StringComparison.OrdinalIgnoreCase))

               {

                    if (child.Properties[ " ServerBindings "].Value !=  null)

                   {

                        object objectArr = child.Properties[ " ServerBindings "].Value;

                        string serverBindingStr =  string.Empty;

                        if (IsArray(objectArr)) // 如果有多个绑定站点时                        {

                            object[] objectToArr = ( object[])objectArr;

                           serverBindingStr = objectToArr[ 0].ToString();

                       }

                        else // 只有一个绑定站点                        {

                           serverBindingStr = child.Properties[ " ServerBindings "].Value.ToString();

                       }

                       IISInfo iisInfo =  new IISInfo();

                       iisInfo.DomainPort = serverBindingStr;

                       iisInfo.AppPool = child.Properties[ " AppPoolId "].Value.ToString(); // 应用程序池                        iisList.Add(iisInfo);

                   }

               }

           }

            return iisList;

       }



        public  static  bool CreateAppPool( string appPoolName,  string Username,  string Password)

       {

            bool issucess =  false;

            try

           {

                // 创建一个新程序池                DirectoryEntry newpool;

               DirectoryEntry apppools =  new DirectoryEntry( " IIS:// " + HostName +  " /W3SVC/AppPools ");

               newpool = apppools.Children.Add(appPoolName,  " IIsApplicationPool ");


                // 设置属性 访问用户名和密码 一般采取默认方式                newpool.Properties[ " WAMUserName "][ 0] = Username;

               newpool.Properties[ " WAMUserPass "][ 0] = Password;

               newpool.Properties[ " AppPoolIdentityType "][ 0] =  " 3 ";

               newpool.CommitChanges();

               issucess =  true;

                return issucess;

           }

            catch  //  (Exception ex)             {

                return  false;

           }

       }



        ///   <summary>

        ///  建立程序池后关联相应应用程序及虚拟目录

        ///   </summary>         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();

                               }

                           }

                       }

                   }

               }

           }

       }



        ///   <summary>

        ///  判断object对象是否为数组

        ///   </summary>         public  static  bool IsArray( object o)

       {

            return o  is Array;

       }

   }

}

 


目录
相关文章
|
2月前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
2月前
|
C#
C#学习相关系列之数组---常用方法使用(二)
C#学习相关系列之数组---常用方法使用(二)
|
10天前
|
设计模式 IDE 测试技术
提升 C#编程效率的技巧与方法
【4月更文挑战第20天】提升C#编程效率的关键技巧包括:选择合适的IDE(如Visual Studio)、掌握基础语法、规划良好代码结构、使用代码生成工具、复用代码、利用库和框架、定期重构、应用设计模式、避免过度设计、进行代码审查、自动化测试、学习新技术、养成良好编程习惯、定期备份代码及参与技术社区。通过这些方法,开发者能提高代码质量和开发效率。
|
22天前
|
C#
C# Dev TreeList常用属性方法
C# Dev TreeList常用属性方法
|
2月前
|
存储 SQL C#
C# 读取二维数组集合输出到Word预设表格
C# 读取二维数组集合输出到Word预设表格
|
2月前
|
存储 安全 C#
C#使用集合组织相关数据
C#使用集合组织相关数据
12 0
|
2月前
|
C#
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
|
2月前
|
C# 索引
C#学习相关系列之base和this的常用方法
C#学习相关系列之base和this的常用方法
|
2月前
|
开发框架 .NET C#
C#学习相关系列之Linq常用方法---排序(一)
C#学习相关系列之Linq常用方法---排序(一)
|
2月前
|
开发框架 .NET 编译器
C#学习相关系列之匿名方法和Lambda表达式
C#学习相关系列之匿名方法和Lambda表达式