引用 Microsoft.Web.Administration;
public class IISHelper { #region 端口 /// <summary> /// 判断端口是否被占用 /// </summary> /// <param name="port">端口</param> /// <returns></returns> public static bool IsPortUsing(int port) { List<int> portList = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners().Select(item => item.Port).ToList<int>(); foreach (int item in portList) { if (item == port) { return true; } } return false; } #endregion #region 应用程序池 /// <summary> /// 检查应用程序池是否存在 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="appPoolName">应用程序池名称</param> /// <returns></returns> public static bool IsPoolExisted(ServerManager serverManager, string appPoolName) { return serverManager.ApplicationPools[appPoolName] == null ? false : true; } /// <summary> /// 添加应用程序池 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="appPoolName">应用程序池名称</param> /// <param name="ManagedRuntimeVersion">.NET Framework版本</param> /// <param name="ManagedPipelineMode">托管管道模式</param> /// <param name="Enable32BitAppOnWin64">是否启用32位应用程序</param> public static void AddPool(ServerManager serverManager, string appPoolName, string ManagedRuntimeVersion, ManagedPipelineMode ManagedPipelineMode, bool Enable32BitAppOnWin64) { ApplicationPool pool = serverManager.ApplicationPools[appPoolName]; if (pool == null) { serverManager.ApplicationPools.Add(appPoolName); pool = serverManager.ApplicationPools[appPoolName]; pool.ManagedRuntimeVersion = ManagedRuntimeVersion; pool.ManagedPipelineMode = ManagedPipelineMode; pool.Enable32BitAppOnWin64 = Enable32BitAppOnWin64; serverManager.CommitChanges(); } } /// <summary> /// 重命名应用程序池名称 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="appPoolOldName">应用程序池旧名称</param> /// <param name="appPoolNewName">应用程序池新名称</param> public static void RenamePool(ServerManager serverManager, string appPoolOldName, string appPoolNewName) { ApplicationPool pool = serverManager.ApplicationPools[appPoolOldName]; if (pool != null) { pool.Name = appPoolNewName; serverManager.CommitChanges(); } } /// <summary> /// 启动应用程序池 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="appPoolName">应用程序池名称</param> /// <returns></returns> public static void StartPool(ServerManager serverManager, string appPoolName) { ApplicationPool pool = serverManager.ApplicationPools[appPoolName]; if (pool != null && (pool.State == ObjectState.Stopped || pool.State == ObjectState.Stopping || pool.State == ObjectState.Unknown)) { pool.Start(); } } /// <summary> /// 停止应用程序池 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="appPoolName">应用程序池名称</param> /// <returns></returns> public static void StopPool(ServerManager serverManager, string appPoolName) { ApplicationPool pool = serverManager.ApplicationPools[appPoolName]; if (pool != null && (pool.State == ObjectState.Started || pool.State == ObjectState.Starting)) { pool.Stop(); } } /// <summary> /// 删除应用程序池 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="appPoolName">应用程序池名称</param> public static void DeletePool(ServerManager serverManager, string appPoolName) { ApplicationPool pool = serverManager.ApplicationPools[appPoolName]; if (pool != null) { serverManager.ApplicationPools.Remove(pool); serverManager.CommitChanges(); } } #endregion #region 站点 /// <summary> /// 判断站点是否存在 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="siteName">站点名称</param> /// <returns></returns> public static bool IsSiteExisted(ServerManager serverManager, string siteName) { return GetSite(serverManager, siteName) == null ? false : true; } /// <summary> /// 获取所有的站点 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <returns></returns> public static List<Site> GetSites(ServerManager serverManager) { return serverManager.Sites.ToList<Site>(); } /// <summary> /// 获取所有的站点名称 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <returns></returns> public static List<string> GetSitesName(ServerManager serverManager) { return serverManager.Sites.Select(it => it.Name).ToList(); } /// <summary> /// 获取指定的站点 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="siteName">站点名称</param> /// <returns></returns> public static Site GetSite(ServerManager serverManager, string siteName) { return serverManager.Sites[siteName]; } /// <summary> /// 获取站点的物理路径 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="siteName">站点名称</param> /// <returns></returns> public static string GetSitePhysicalPath(ServerManager serverManager, string siteName) { Application app = serverManager.Sites[siteName].Applications.Where(it => it.Path == "/").SingleOrDefault(); return app != null ? app.VirtualDirectories[0].PhysicalPath : String.Empty; } /// <summary> /// 创建站点 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="siteName">站点名称</param> /// <param name="sitePhysicalPath">站点物理路径</param> /// <param name="sitePort">站点端口</param> /// <param name="host">主机</param> /// <param name="requestType">请求类型:http或者https</param> public static void CreateSite(ServerManager serverManager, string siteName, string sitePhysicalPath, string sitePort, string host, string adminUserName = "", string adminPassword = "", string requestType = "http") { if (serverManager.Sites[siteName] == null) { Site site = serverManager.Sites.Add(siteName, requestType, String.Format(@"{host}:{port}:", host, sitePort), sitePhysicalPath); if (!string.IsNullOrEmpty(adminUserName) && !string.IsNullOrEmpty(adminPassword)) { VirtualDirectory virtualDic = site.Applications[0].VirtualDirectories[0]; virtualDic.UserName = adminUserName; virtualDic.Password = adminPassword; } serverManager.CommitChanges(); } } /// <summary> /// 重命名站点 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="siteOldName">站点旧名称</param> /// <param name="siteNewName">站点新名称</param> public static void RenameSite(ServerManager serverManager, string siteOldName, string siteNewName) { if (serverManager.Sites[siteOldName] != null) { serverManager.Sites[siteOldName].Name = siteNewName; serverManager.CommitChanges(); } } /// <summary> /// 删除站点 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="siteName">站点名称</param> public static void DeleteSite(ServerManager serverManager, string siteName) { if (serverManager.Sites[siteName] != null) { serverManager.Sites.Remove(serverManager.Sites[siteName]); serverManager.CommitChanges(); } } #endregion #region 应用程序 /// <summary> /// 判断应用程序是否存在 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="siteName">站点名称</param> /// <param name="appName">应用程序名称</param> /// <returns></returns> public static bool IsAppExisted(ServerManager serverManager, string siteName, string appName) { return GetApp(serverManager, siteName, appName) == null ? false : true; } /// <summary> /// 获取指定站点的所有应用程序 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="siteName">站点名称</param> /// <returns></returns> public static List<Microsoft.Web.Administration.Application> GetApp(ServerManager serverManager, string siteName) { return serverManager.Sites[siteName].Applications.Where(it => it.Path != "/").ToList<Microsoft.Web.Administration.Application>(); } /// <summary> /// 获取指定站点的指定应用程序 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="siteName">站点名称</param> /// <param name="appName">应用程序名称</param> /// <returns></returns> public static Microsoft.Web.Administration.Application GetApp(ServerManager serverManager, string siteName, string appName) { if (appName != "/") { appName = Path.Combine("/" + appName); } return serverManager.Sites[siteName].Applications.Where(it => it.Path == (appName)).FirstOrDefault(); } /// <summary> /// 创建应用程序 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="siteName">站点名称</param> /// <param name="appName">应用程序名称</param> /// <param name="physicalPath">应用程序物理路径</param> public static void CreateApp(ServerManager serverManager, string siteName, string appName, string physicalPath) { if (serverManager.Sites[siteName] != null && serverManager.Sites[siteName].Applications[appName] == null) { serverManager.Sites[siteName].Applications.Add(Path.Combine("/" + appName), physicalPath); serverManager.CommitChanges(); } } /// <summary> /// 删除应用程序 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <param name="siteName">站点名称</param> /// <param name="appName">应用程序名称</param> public static void DeleteApp(ServerManager serverManager, string siteName, string appName) { if (serverManager.Sites[siteName] != null && serverManager.Sites[siteName].Applications[appName] != null) { serverManager.Sites[siteName].Applications.Remove(serverManager.Sites[siteName].Applications[appName]); serverManager.CommitChanges(); } } #endregion #region 站点应用程序 /// <summary> /// 获取所有的站点和应用程序 /// </summary> /// <param name="serverManager">服务器管理对象</param> /// <returns></returns> public static List<SiteApp> GetSitesApps(ServerManager serverManager) { List<SiteApp> SiteAppList = new List<SiteApp>(); foreach (Site item in serverManager.Sites) { SiteApp sa = new SiteApp(); sa.site = item; sa.app = new List<Microsoft.Web.Administration.Application>(); foreach (Microsoft.Web.Administration.Application it in sa.site.Applications.Where(it => it.Path != @"/")) { sa.app.Add(it); } SiteAppList.Add(sa); } return SiteAppList; } #endregion public class SiteApp { /// <summary> /// 站点 /// </summary> public Microsoft.Web.Administration.Site site { get; set; } /// <summary> /// 应用程序 /// </summary> public List<Microsoft.Web.Administration.Application> app { get; set; } } }