using System.Collections.Generic; using System.DirectoryServices; using System.Linq; using Microsoft.Web.Administration; //位于:C:WindowsSystem32inetsrvMicrosoft.Web.Administration.dll namespace Whir.Software.IISManager.IISManager { /// <summary> /// IIS应用程序池辅助类 /// </summary> public class AppPoolService { protected static string Host = "localhost"; /// <summary> /// 取得所有应用程序池 /// </summary> /// <returns></returns> public static List<string> GetAppPools() { var appPools = new DirectoryEntry(string.Format("IIS://{0}/W3SVC/AppPools", Host)); return (from DirectoryEntry entry in appPools.Children select entry.Name).ToList(); } /// <summary> /// 取得单个应用程序池 /// </summary> /// <returns></returns> public static ApplicationPool GetAppPool(string appPoolName) { ApplicationPool app = null; var appPools = new DirectoryEntry(string.Format("IIS://{0}/W3SVC/AppPools", Host)); foreach (DirectoryEntry entry in appPools.Children) { if (entry.Name == appPoolName) { var manager = new ServerManager(); app = manager.ApplicationPools[appPoolName]; } } return app; } /// <summary> /// 判断程序池是否存在 /// </summary> /// <param name="appPoolName">程序池名称</param> /// <returns>true存在 false不存在</returns> public static bool IsAppPoolExsit(string appPoolName) { bool result = false; var appPools = new DirectoryEntry(string.Format("IIS://{0}/W3SVC/AppPools", Host)); foreach (DirectoryEntry entry in appPools.Children) { if (entry.Name.Equals(appPoolName)) { result = true; break; } } return result; } /// <summary> /// 删除指定程序池 /// </summary> /// <param name="appPoolName">程序池名称</param> /// <returns>true删除成功 false删除失败</returns> public static bool DeleteAppPool(string appPoolName) { bool result = false; var appPools = new DirectoryEntry(string.Format("IIS://{0}/W3SVC/AppPools", Host)); foreach (DirectoryEntry entry in appPools.Children) { if (entry.Name.Equals(appPoolName)) { try { entry.DeleteTree(); result = true; break; } catch { result = false; } } } return result; } /// <summary> /// 创建应用程序池 /// </summary> /// <param name="appPool"></param> /// <returns></returns> public static bool CreateAppPool(string appPool) { try { if (!IsAppPoolExsit(appPool)) { var appPools = new DirectoryEntry(string.Format("IIS://{0}/W3SVC/AppPools", Host)); DirectoryEntry entry = appPools.Children.Add(appPool, "IIsApplicationPool"); entry.CommitChanges(); return true; } } catch { return false; } return false; } /// <summary> /// 编辑应用程序池 /// </summary> /// <param name="application"></param> /// <returns></returns> public static bool EditAppPool(ApplicationPool application) { try { if (IsAppPoolExsit(application.Name)) { var manager = new ServerManager(); manager.ApplicationPools[application.Name].ManagedRuntimeVersion = application.ManagedRuntimeVersion; manager.ApplicationPools[application.Name].ManagedPipelineMode = application.ManagedPipelineMode; //托管模式Integrated为集成 Classic为经典 manager.CommitChanges(); return true; } } catch { return false; } return false; } } }