C#操作IIS方法集合
更新時間:2015年09月28日 12:04:56 投稿:lijiao
這篇文章主要介紹了C#操作IIS方法集合的相關(guān)資料,需要的朋友可以參考下
C# 操作IIS方法集合
如果在win8,win7情況下報錯:未知錯誤(0x80005000) ----見http://www.dbjr.com.cn/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 操作方法集合 /// http://www.dbjr.com.cn/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> /// 創(chuàng)建虛擬目錄網(wǎng)站 /// </summary> /// <param name="webSiteName">網(wǎng)站名稱</param> /// <param name="physicalPath">物理路徑</param> /// <param name="domainPort">站點+端口,如192.168.1.23:90</param> /// <param name="isCreateAppPool">是否創(chuàng)建新的應(yīng)用程序池</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; } } } // 創(chuàng)建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"); // 創(chuàng)建應(yīng)用程序虛擬目錄 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:經(jīng)典模式 newpool.CommitChanges(); siteVDir.Properties["AppPoolId"][0] = webSiteName; } siteVDir.CommitChanges(); site.CommitChanges(); return siteID; } /// <summary> /// 得到網(wǎng)站的物理路徑 /// </summary> /// <param name="rootEntry">網(wǎng)站節(jié)點</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();//應(yīng)用程序池 iisList.Add(iisInfo); } } } return iisList; } public static bool CreateAppPool(string appPoolName, string Username, string Password) { bool issucess = false; try { //創(chuàng)建一個新程序池 DirectoryEntry newpool; DirectoryEntry apppools = new DirectoryEntry("IIS://" + HostName + "/W3SVC/AppPools"); newpool = apppools.Children.Add(appPoolName, "IIsApplicationPool"); //設(shè)置屬性 訪問用戶名和密碼 一般采取默認方式 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> /// 建立程序池后關(guān)聯(lián)相應(yīng)應(yīng)用程序及虛擬目錄 /// </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")) { //設(shè)置應(yīng)用程序程序池 先獲得應(yīng)用程序 在設(shè)定應(yīng)用程序程序池 //第一次測試根目錄 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對象是否為數(shù)組 /// </summary> public static bool IsArray(object o) { return o is Array; } } }
希望本文所述對大家的C#程序設(shè)計有所幫助。
相關(guān)文章
C#中String.LastIndexOf方法小結(jié)
String.LastIndexOf()是C#中string類的一個方法,它用于在字符串中查找指定子字符串(或字符)最后一次出現(xiàn)的位置,并返回其索引,本文主要介紹了C#中String.LastIndexOf方法小結(jié),感興趣的可以了解一下2024-01-01C#使用Automation實現(xiàn)控制自動撥打接聽電話
這篇文章主要為大家詳細介紹了C#如何使用Automation實現(xiàn)控制自動撥打接聽電話,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02輕松學(xué)習(xí)C#的預(yù)定義數(shù)據(jù)類型
輕松學(xué)習(xí)C#的預(yù)定義數(shù)據(jù)類型,C#的預(yù)定義數(shù)據(jù)類型包括兩種,一種是值類型,一種是引用類型,需要的朋友可以參考下2015-11-11C#實現(xiàn)給DataGrid單元行添加雙擊事件的方法
這篇文章主要介紹了C#實現(xiàn)給DataGrid單元行添加雙擊事件的方法,較為詳細的分析了C#給DataGrid單元添加雙擊事件的步驟及相關(guān)實現(xiàn)代碼,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07