当前位置:   article > 正文

C# 操作IIS类_c#判断iis站点是否存在

c#判断iis站点是否存在

 Tips:这个类并非原创,但是我网上太多了,我也不知道原创是谁了,写转载吧又找不到连接了。如果原创看到了这个贴可以联系我删除或者改为转载!谢谢!

  1. // vs2013项目添加引用应该找到这个包
  2. using Microsoft.Web.Administration;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Net;
  7. using System.Net.NetworkInformation;
  8. using System.ServiceProcess;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace 自动部署网站
  12. {
  13. public class IIS
  14. {
  15. #region 应用程序池操作
  16. /// <summary>
  17. /// 创建应用程序池
  18. /// </summary>
  19. /// <param name="poolname">应用程序池名称</param>
  20. /// <param name="enable32bitOn64">是否启用32位应用程序</param>
  21. /// <param name="mode">经典模式或者集成模式</param>
  22. /// <param name="runtimeVersion">CLR版本</param>
  23. public static bool CreateAppPool(string poolName, bool enable32bitOn64 = true, ManagedPipelineMode mode = ManagedPipelineMode.Classic, string runtimeVersion = "v2.0", bool autoStart = true)
  24. {
  25. using (ServerManager serverManager = new ServerManager())
  26. {
  27. if (serverManager.ApplicationPools[poolName] != null)
  28. {
  29. throw new Exception("已经存在的应用程序池,请更换应用池名称!");
  30. }
  31. ApplicationPool newPool = serverManager.ApplicationPools.Add(poolName);
  32. newPool.ManagedRuntimeVersion = runtimeVersion;
  33. newPool.Enable32BitAppOnWin64 = enable32bitOn64;
  34. newPool.ManagedPipelineMode = mode;
  35. newPool.AutoStart = autoStart;
  36. serverManager.CommitChanges();
  37. return true;
  38. }
  39. }
  40. /// <summary>
  41. /// 删除应用程序池
  42. /// </summary>
  43. /// <param name="poolName">应用程序池名字</param>
  44. /// <returns></returns>
  45. public static bool DeleteAppPool(string poolName)
  46. {
  47. using (ServerManager serverManager = new ServerManager())
  48. {
  49. var poolObj = serverManager.ApplicationPools[poolName];
  50. if (poolObj != null)
  51. {
  52. serverManager.ApplicationPools.Remove(poolObj);
  53. }
  54. serverManager.CommitChanges();
  55. return true;
  56. }
  57. }
  58. /// <summary>
  59. /// 根据应用程序池名称判断应用程序池是否存在
  60. /// </summary>
  61. /// <param name="poolName"></param>
  62. /// <returns></returns>
  63. public static bool IsAppPoolExisted(string poolName)
  64. {
  65. using (ServerManager serverManager = new ServerManager())
  66. {
  67. var poolObj = serverManager.ApplicationPools[poolName];
  68. if (poolObj == null)
  69. {
  70. return false;
  71. }
  72. return true;
  73. }
  74. }
  75. #endregion
  76. #region 端口操作
  77. /// <summary>
  78. /// 判断端口是否被占用
  79. /// </summary>
  80. /// <param name="port"></param>
  81. /// <returns></returns>
  82. public static bool IsPortUsing(int port)
  83. {
  84. bool inUse = false;
  85. IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();
  86. IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners();
  87. foreach (IPEndPoint endPoint in ipEndPoints)
  88. {
  89. if (endPoint.Port == port)
  90. {
  91. inUse = true;
  92. break;
  93. }
  94. }
  95. return inUse;
  96. }
  97. #endregion
  98. #region 站点操作
  99. /// <summary>
  100. /// 获取所有的站点
  101. /// </summary>
  102. /// <returns></returns>
  103. public static List<string> GetAllSites()
  104. {
  105. using (ServerManager serverManager = new ServerManager())
  106. {
  107. return serverManager.Sites.Select(it => it.Name).ToList();
  108. }
  109. }
  110. /// <summary>
  111. /// 创建站点
  112. /// </summary>
  113. /// <param name="siteName">站点名称</param>
  114. /// <param name="path">站点路径</param>
  115. /// <param name="port">端口</param>
  116. /// <param name="host">主机</param>
  117. /// <param name="requestType">请求类型:http或者https</param>
  118. public static void CreateSite(string siteName, string path, string port = "8000", string host = "*", string adminUserName = "", string adminPassword = "", string requestType = "http")
  119. {
  120. using (ServerManager serverManager = new ServerManager())
  121. {
  122. var sites = serverManager.Sites;
  123. if (sites[siteName] == null)
  124. {
  125. var site = sites.Add(siteName, requestType, $"{host}:{port}:", path);
  126. if (!string.IsNullOrEmpty(adminUserName) && !string.IsNullOrEmpty(adminPassword))
  127. {
  128. var virtualDic = site.Applications[0].VirtualDirectories[0];
  129. virtualDic.UserName = adminUserName;
  130. virtualDic.Password = adminPassword;
  131. }
  132. serverManager.CommitChanges();
  133. }
  134. }
  135. }
  136. /// <summary>
  137. /// 获取站点
  138. /// </summary>
  139. /// <param name="serverManager"></param>
  140. /// <param name="siteName"></param>
  141. /// <returns></returns>
  142. private static Site GetSite(ServerManager serverManager, string siteName)
  143. {
  144. return serverManager.Sites[siteName];
  145. }
  146. /// <summary>
  147. /// 获取站点
  148. /// </summary>
  149. /// <param name="siteName"></param>
  150. /// <returns></returns>
  151. public static Site GetSite(string siteName)
  152. {
  153. return GetSite(siteName);
  154. }
  155. /// <summary>
  156. /// 判断站点是否存在
  157. /// </summary>
  158. /// <param name="siteName"></param>
  159. /// <returns></returns>
  160. public static bool IsSiteExisted(string siteName)
  161. {
  162. using (var serverManager = new ServerManager())
  163. {
  164. if (serverManager.Sites[siteName] == null)
  165. {
  166. return false;
  167. }
  168. return true;
  169. }
  170. }
  171. /// <summary>
  172. /// 获取站点的物理路径
  173. /// </summary>
  174. /// <param name="siteName"></param>
  175. /// <returns></returns>
  176. public static string GetSitePhysicalPath(string siteName)
  177. {
  178. using (ServerManager serverManager = new ServerManager())
  179. {
  180. var app = serverManager.Sites[siteName].Applications.Where(it => it.Path == "/").SingleOrDefault();
  181. if (app != null)
  182. {
  183. return app.VirtualDirectories[0].PhysicalPath;
  184. }
  185. else
  186. {
  187. return "";
  188. }
  189. }
  190. }
  191. #endregion
  192. #region 应用程序操作
  193. /// <summary>
  194. /// 判断应用程序是否存在
  195. /// </summary>
  196. /// <param name="siteName"></param>
  197. /// <param name="appName"></param>
  198. /// <returns></returns>
  199. public static bool IsApplicationExisted(string siteName, string appName)
  200. {
  201. using (ServerManager serverManager = new ServerManager())
  202. {
  203. var site = serverManager.Sites[siteName];
  204. if (GetApplication(serverManager, siteName, appName) == null)
  205. {
  206. return false;
  207. }
  208. else
  209. {
  210. return true;
  211. }
  212. }
  213. }
  214. /// <summary>
  215. /// 创建应用程序
  216. /// </summary>
  217. /// <param name="siteName"></param>
  218. /// <param name="applicationName"></param>
  219. /// <param name="path"></param>
  220. public static void CreateApplication(string siteName, string applicationName, string path)
  221. {
  222. using (ServerManager serverManager = new ServerManager())
  223. {
  224. var site = GetSite(serverManager, siteName);
  225. var config = site.GetWebConfiguration();
  226. var applications = site.Applications;
  227. if (applications["/" + applicationName] == null)
  228. {
  229. var app = applications.Add("/" + applicationName, path);
  230. serverManager.CommitChanges();
  231. }
  232. }
  233. }
  234. /// <summary>
  235. /// 创建虚拟路径
  236. /// </summary>
  237. /// <param name="siteName">站点名称</param>
  238. /// <param name="applicationName">应用名称</param>
  239. /// <param name="virtualDirectoryName">虚拟路径名称</param>
  240. /// <param name="path">路径</param>
  241. public static void CreateVirtualDirectory(string siteName, string applicationName, string virtualDirectoryName, string path)
  242. {
  243. using (ServerManager serverManager = new ServerManager())
  244. {
  245. Application application = GetApplication(serverManager, siteName, applicationName);
  246. application.VirtualDirectories.Add("/" + virtualDirectoryName, path);
  247. serverManager.CommitChanges();
  248. }
  249. }
  250. / <summary>
  251. / 给站点设置应用程序池
  252. / </summary>
  253. / <param name="siteName">站点名称</param>
  254. / <param name="applicationPoolName">应用名称</param>
  255. //public static void SetApplicationApplicationPool(string siteName, string applicationPoolName, string adminUserName = "", string adminPassword = "")
  256. //{
  257. // using (ServerManager serverManager = new ServerManager())
  258. // {
  259. // var site = GetSite(serverManager, siteName);
  260. // if (site != null)
  261. // {
  262. // Application application = GetApplication(serverManager, siteName, applicationPoolName);
  263. // if (application != null)
  264. // {
  265. // application.ApplicationPoolName = applicationPoolName;
  266. // if (!string.IsNullOrEmpty(adminUserName) && !string.IsNullOrEmpty(adminPassword))
  267. // {
  268. // application.VirtualDirectories[0].UserName = adminUserName;
  269. // application.VirtualDirectories[0].Password = adminPassword;
  270. // }
  271. // }
  272. // }
  273. // serverManager.CommitChanges();
  274. // }
  275. //}
  276. /// <summary>
  277. /// 给应用程序设置应用程序池
  278. /// </summary>
  279. /// <param name="siteName">站点名称</param>
  280. /// <param name="appName">引用程序名称</param>
  281. /// <param name="applicationPoolName">引用程序池名称</param>
  282. /// <param name="adminUserName">连接为用户名</param>
  283. /// <param name="adminPassword">连接为用户密码</param>
  284. public static void SetApplicationApplicationPool(string siteName, string appName, string applicationPoolName, string adminUserName = "", string adminPassword = "")
  285. {
  286. using (ServerManager serverManager = new ServerManager())
  287. {
  288. var site = GetSite(serverManager, siteName);
  289. if (site != null)
  290. {
  291. Application application = GetApplication(serverManager, siteName, appName);
  292. if (application != null)
  293. {
  294. application.ApplicationPoolName = applicationPoolName;
  295. if (!string.IsNullOrEmpty(adminUserName) && !string.IsNullOrEmpty(adminPassword))
  296. {
  297. application.VirtualDirectories[0].UserName = adminUserName;
  298. application.VirtualDirectories[0].Password = adminPassword;
  299. }
  300. }
  301. }
  302. serverManager.CommitChanges();
  303. }
  304. }
  305. /// <summary>
  306. /// 获取指定站点的应用程序
  307. /// </summary>
  308. /// <param name="serverManager">服务器管理对象</param>
  309. /// <param name="siteName">站点名称</param>
  310. /// <param name="applicationName">应用程序名称</param>
  311. /// <returns></returns>
  312. private static Application GetApplication(ServerManager serverManager, string siteName, string applicationName)
  313. {
  314. var site = serverManager.Sites[siteName];
  315. if (site == null)
  316. {
  317. throw new Exception($"名称{siteName}为站点不存在!");
  318. }
  319. if (applicationName != "/")
  320. {
  321. applicationName = "/" + applicationName;
  322. }
  323. return site.Applications.Where(it => it.Path == (applicationName)).FirstOrDefault();
  324. }
  325. #endregion
  326. #region IIS操作
  327. /// <summary>
  328. /// 判断IIS服务器是否存在
  329. /// </summary>
  330. /// <returns></returns>
  331. public static bool IsIISExist()
  332. {
  333. return ExistService("W3SVC");
  334. }
  335. /// <summary>
  336. /// 判断IIS服务器是否存在
  337. /// </summary>
  338. /// <returns></returns>
  339. public static bool ExistService(string serviceName)
  340. {
  341. var services = ServiceController.GetServices();
  342. return services.Count(it => it.ServiceName.Equals(serviceName, StringComparison.Ordinal)) > 0;
  343. }
  344. /// <summary>
  345. /// 判断IIS服务器是否在运行
  346. /// </summary>
  347. /// <returns></returns>
  348. public static bool IsIISRunning()
  349. {
  350. var services = ServiceController.GetServices();
  351. return services.Count(it => it.ServiceName == "W3SVC" && it.Status == ServiceControllerStatus.Running) > 0;
  352. }
  353. #endregion
  354. }
  355. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/252290
推荐阅读
相关标签
  

闽ICP备14008679号