C# 操作IIS方法集合
如果在win8,win7情况下报错:未知错误(0x80005000) ----见http://www.phpstudy.net/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.phpstudy.net/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#程序设计有所帮助。
本文地址:https://www.stayed.cn/item/24925
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我