如果在win8,win7情况下报错:未知错误(0x80005000)
见http://blog.csdn.net/ts1030746080/article/details/8741399
1 using System; 2 using System.Collections; 3 using System.Collections.Generic; 4 using System.DirectoryServices; 5 using System.Linq; 6 using System.Net; 7 using System.Text; 8 using System.Threading.Tasks; 9 10 namespace IISControlHelper 11 { 12 /// <summary> 13 /// IIS 操作方法集合 14 /// http://blog.csdn.net/ts1030746080/article/details/8741399 错误 15 /// </summary> 16 public class IISWorker 17 { 18 private static string HostName = "localhost"; 19 20 /// <summary> 21 /// 获取本地IIS版本 22 /// </summary> 23 /// <returns></returns> 24 public static string GetIIsVersion() 25 { 26 try 27 { 28 DirectoryEntry entry = new DirectoryEntry("IIS://" + HostName + "/W3SVC/INFO"); 29 string version = entry.Properties["MajorIISVersionNumber"].Value.ToString(); 30 return version; 31 } 32 catch (Exception se) 33 { 34 //说明一点:IIS5.0中没有(int)entry.Properties["MajorIISVersionNumber"].Value;属性,将抛出异常 证明版本为 5.0 35 return string.Empty; 36 } 37 } 38 39 /// <summary> 40 /// 创建虚拟目录网站 41 /// </summary> 42 /// <param name="webSiteName">网站名称</param> 43 /// <param name="physicalPath">物理路径</param> 44 /// <param name="domainPort">站点+端口,如192.168.1.23:90</param> 45 /// <param name="isCreateAppPool">是否创建新的应用程序池</param> 46 /// <returns></returns> 47 public static int CreateWebSite(string webSiteName, string physicalPath, string domainPort,bool isCreateAppPool) 48 { 49 DirectoryEntry root = new DirectoryEntry("IIS://" + HostName + "/W3SVC"); 50 // 为新WEB站点查找一个未使用的ID 51 int siteID = 1; 52 foreach (DirectoryEntry e in root.Children) 53 { 54 if (e.SchemaClassName == "IIsWebServer") 55 { 56 int ID = Convert.ToInt32(e.Name); 57 if (ID >= siteID) { siteID = ID + 1; } 58 } 59 } 60 // 创建WEB站点 61 DirectoryEntry site = (DirectoryEntry)root.Invoke("Create", "IIsWebServer", siteID); 62 site.Invoke("Put", "ServerComment", webSiteName); 63 site.Invoke("Put", "KeyType", "IIsWebServer"); 64 site.Invoke("Put", "ServerBindings", domainPort + ":"); 65 site.Invoke("Put", "ServerState", 2); 66 site.Invoke("Put", "FrontPageWeb", 1); 67 site.Invoke("Put", "DefaultDoc", "Default.html"); 68 // site.Invoke("Put", "SecureBindings", ":443:"); 69 site.Invoke("Put", "ServerAutoStart", 1); 70 site.Invoke("Put", "ServerSize", 1); 71 site.Invoke("SetInfo"); 72 // 创建应用程序虚拟目录 73 74 DirectoryEntry siteVDir = site.Children.Add("Root", "IISWebVirtualDir"); 75 siteVDir.Properties["AppIsolated"][0] = 2; 76 siteVDir.Properties["Path"][0] = physicalPath; 77 siteVDir.Properties["AccessFlags"][0] = 513; 78 siteVDir.Properties["FrontPageWeb"][0] = 1; 79 siteVDir.Properties["AppRoot"][0] = "LM/W3SVC/" + siteID + "/Root"; 80 siteVDir.Properties["AppFriendlyName"][0] = "Root"; 81 82 if (isCreateAppPool) 83 { 84 DirectoryEntry apppools = new DirectoryEntry("IIS://" + HostName + "/W3SVC/AppPools"); 85 86 DirectoryEntry newpool = apppools.Children.Add(webSiteName, "IIsApplicationPool"); 87 newpool.Properties["AppPoolIdentityType"][0] = "4"; //4 88 newpool.Properties["ManagedPipelineMode"][0] = "0"; //0:集成模式 1:经典模式 89 newpool.CommitChanges(); 90 siteVDir.Properties["AppPoolId"][0] = webSiteName; 91 } 92 93 siteVDir.CommitChanges(); 94 site.CommitChanges(); 95 return siteID; 96 } 97 98 /// <summary> 99 /// 得到网站的物理路径 100 /// </summary> 101 /// <param name="rootEntry">网站节点</param> 102 /// <returns></returns> 103 public static string GetWebsitePhysicalPath(DirectoryEntry rootEntry) 104 { 105 string physicalPath = ""; 106 foreach (DirectoryEntry childEntry in rootEntry.Children) 107 { 108 if ((childEntry.SchemaClassName == "IIsWebVirtualDir") && (childEntry.Name.ToLower() == "root")) 109 { 110 if (childEntry.Properties["Path"].Value != null) 111 { 112 physicalPath = childEntry.Properties["Path"].Value.ToString(); 113 } 114 else 115 { 116 physicalPath = ""; 117 } 118 } 119 } 120 return physicalPath; 121 } 122 123 /// <summary> 124 /// 获取站点名 125 /// </summary> 126 public static List<IISInfo> GetServerBindings() 127 { 128 List<IISInfo> iisList = new List<IISInfo>(); 129 string entPath = String.Format("IIS://{0}/w3svc", HostName); 130 DirectoryEntry ent = new DirectoryEntry(entPath); 131 foreach (DirectoryEntry child in ent.Children) 132 { 133 if (child.SchemaClassName.Equals("IIsWebServer", StringComparison.OrdinalIgnoreCase)) 134 { 135 if (child.Properties["ServerBindings"].Value != null) 136 { 137 object objectArr = child.Properties["ServerBindings"].Value; 138 string serverBindingStr = string.Empty; 139 if (IsArray(objectArr))//如果有多个绑定站点时 140 { 141 object[] objectToArr = (object[])objectArr; 142 serverBindingStr = objectToArr[0].ToString(); 143 } 144 else//只有一个绑定站点 145 { 146 serverBindingStr = child.Properties["ServerBindings"].Value.ToString(); 147 } 148 IISInfo iisInfo = new IISInfo(); 149 iisInfo.DomainPort = serverBindingStr; 150 iisInfo.AppPool = child.Properties["AppPoolId"].Value.ToString();//应用程序池 151 iisList.Add(iisInfo); 152 } 153 } 154 } 155 return iisList; 156 } 157 158 159 public static bool CreateAppPool(string appPoolName, string Username, string Password) 160 { 161 bool issucess = false; 162 try 163 { 164 //创建一个新程序池 165 DirectoryEntry newpool; 166 DirectoryEntry apppools = new DirectoryEntry("IIS://" + HostName + "/W3SVC/AppPools"); 167 newpool = apppools.Children.Add(appPoolName, "IIsApplicationPool"); 168 169 //设置属性 访问用户名和密码 一般采取默认方式 170 newpool.Properties["WAMUserName"][0] = Username; 171 newpool.Properties["WAMUserPass"][0] = Password; 172 newpool.Properties["AppPoolIdentityType"][0] = "3"; 173 newpool.CommitChanges(); 174 issucess = true; 175 return issucess; 176 } 177 catch // (Exception ex) 178 { 179 return false; 180 } 181 } 182 183 184 /// <summary> 185 /// 建立程序池后关联相应应用程序及虚拟目录 186 /// </summary> 187 public static void SetAppToPool(string appname,string poolName) 188 { 189 //获取目录 190 DirectoryEntry getdir = new DirectoryEntry("IIS://localhost/W3SVC"); 191 foreach (DirectoryEntry getentity in getdir.Children) 192 { 193 if (getentity.SchemaClassName.Equals("IIsWebServer")) 194 { 195 //设置应用程序程序池 先获得应用程序 在设定应用程序程序池 196 //第一次测试根目录 197 foreach (DirectoryEntry getchild in getentity.Children) 198 { 199 if (getchild.SchemaClassName.Equals("IIsWebVirtualDir")) 200 { 201 //找到指定的虚拟目录. 202 foreach (DirectoryEntry getsite in getchild.Children) 203 { 204 if (getsite.Name.Equals(appname)) 205 { 206 //【测试成功通过】 207 getsite.Properties["AppPoolId"].Value = poolName; 208 getsite.CommitChanges(); 209 } 210 } 211 } 212 } 213 } 214 } 215 } 216 217 218 /// <summary> 219 /// 判断object对象是否为数组 220 /// </summary> 221 public static bool IsArray(object o) 222 { 223 return o is Array; 224 } 225 } 226 }