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;

       }

   }

}

 


目录
相关文章
|
7天前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
1月前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
116 65
|
9天前
|
JSON 程序员 C#
使用 C# 比较两个对象是否相等的7个方法总结
比较对象是编程中的一项基本技能,在实际业务中经常碰到,比如在ERP系统中,企业的信息非常重要,每一次更新,都需要比较记录更新前后企业的信息,直接比较通常只能告诉我们它们是否指向同一个内存地址,那我们应该怎么办呢?分享 7 个方法给你!
|
11天前
|
C# UED SEO
C# 异步方法async / await任务超时处理
通过使用 `Task.WhenAny`和 `Task.Delay`方法,您可以在C#中有效地实现异步任务的超时处理机制。这种方法允许您在指定时间内等待任务完成,并在任务超时时采取适当的措施,如抛出异常或执行备用操作。希望本文提供的详细解释和代码示例能帮助您在实际项目中更好地处理异步任务超时问题,提升应用程序的可靠性和用户体验。
35 3
|
1月前
|
开发框架 NoSQL MongoDB
C#/.NET/.NET Core开发实战教程集合
C#/.NET/.NET Core开发实战教程集合
|
1月前
|
存储 C#
【C#】大批量判断文件是否存在的两种方法效率对比
【C#】大批量判断文件是否存在的两种方法效率对比
40 1
|
1月前
|
C#
C#的方法的参数传递
C#的方法的参数传递
16 0
|
1月前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
46 0
|
5月前
|
网络协议
windows_server2012搭建iis并配置http重定向 iis转发
windows_server2012搭建iis并配置http重定向 iis转发
320 1
|
3月前
|
开发框架 .NET 中间件
【Azure 云服务】在Cloud Service的代码中如何修改IIS Application Pool的配置呢? 比如IdleTimeout, startMode, Recycling.PeriodicRestart.Time等
【Azure 云服务】在Cloud Service的代码中如何修改IIS Application Pool的配置呢? 比如IdleTimeout, startMode, Recycling.PeriodicRestart.Time等
【Azure 云服务】在Cloud Service的代码中如何修改IIS Application Pool的配置呢? 比如IdleTimeout, startMode, Recycling.PeriodicRestart.Time等