首页 > 编程 > C# > 正文

C#操作IIS方法集合

2019-10-29 21:38:00
字体:
来源:转载
供稿:网友

这篇文章主要介绍了C#操作IIS方法集合的相关资料,需要的朋友可以参考下

C# 操作IIS方法集合

如果在win8,win7情况下报错:未知错误(0x80005000) --- 

 

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表