C# 操作IIS方法集合
如果在win8,win7情況下報錯:未知錯誤(0x80005000) ----見//m.survivalescaperooms.com/article/72881.htm
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 操作方法集合  /// //m.survivalescaperooms.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#程序設計有所幫助。
新聞熱點
疑難解答