好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#操作IIS方法集合

C# 操作IIS方法集合
如果在win8,win7情况下报错:未知错误(0x80005000) ----见 http://www.zzvips.com/article/200583.html

?

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://www.zzvips.com/article/72881.htm 错误

   /// </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;

     }

   }

}

 

希望本文所述对大家的C#程序设计有所帮助。

dy("nrwz");

查看更多关于C#操作IIS方法集合的详细内容...

  阅读:77次