评论

收藏

[C++] C# 操作IIS方法集合

编程语言 编程语言 发布于:2021-07-18 15:38 | 阅读数:556 | 评论:0

如果在win8,win7情况下报错:未知错误(0x80005000)
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 操作方法集合
   ///   </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;
    }
  }
}


关注下面的标签,发现更多相似文章