赞
踩
Tips:这个类并非原创,但是我网上太多了,我也不知道原创是谁了,写转载吧又找不到连接了。如果原创看到了这个贴可以联系我删除或者改为转载!谢谢!
- // vs2013项目添加引用应该找到这个包
- using Microsoft.Web.Administration;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net;
- using System.Net.NetworkInformation;
- using System.ServiceProcess;
- using System.Text;
- using System.Threading.Tasks;
-
- namespace 自动部署网站
- {
- public class IIS
- {
-
-
- #region 应用程序池操作
-
- /// <summary>
- /// 创建应用程序池
- /// </summary>
- /// <param name="poolname">应用程序池名称</param>
- /// <param name="enable32bitOn64">是否启用32位应用程序</param>
- /// <param name="mode">经典模式或者集成模式</param>
- /// <param name="runtimeVersion">CLR版本</param>
- public static bool CreateAppPool(string poolName, bool enable32bitOn64 = true, ManagedPipelineMode mode = ManagedPipelineMode.Classic, string runtimeVersion = "v2.0", bool autoStart = true)
- {
- using (ServerManager serverManager = new ServerManager())
- {
- if (serverManager.ApplicationPools[poolName] != null)
- {
- throw new Exception("已经存在的应用程序池,请更换应用池名称!");
- }
- ApplicationPool newPool = serverManager.ApplicationPools.Add(poolName);
- newPool.ManagedRuntimeVersion = runtimeVersion;
- newPool.Enable32BitAppOnWin64 = enable32bitOn64;
- newPool.ManagedPipelineMode = mode;
- newPool.AutoStart = autoStart;
- serverManager.CommitChanges();
- return true;
- }
- }
-
- /// <summary>
- /// 删除应用程序池
- /// </summary>
- /// <param name="poolName">应用程序池名字</param>
- /// <returns></returns>
- public static bool DeleteAppPool(string poolName)
- {
- using (ServerManager serverManager = new ServerManager())
- {
- var poolObj = serverManager.ApplicationPools[poolName];
- if (poolObj != null)
- {
- serverManager.ApplicationPools.Remove(poolObj);
- }
- serverManager.CommitChanges();
- return true;
- }
- }
-
- /// <summary>
- /// 根据应用程序池名称判断应用程序池是否存在
- /// </summary>
- /// <param name="poolName"></param>
- /// <returns></returns>
- public static bool IsAppPoolExisted(string poolName)
- {
- using (ServerManager serverManager = new ServerManager())
- {
- var poolObj = serverManager.ApplicationPools[poolName];
- if (poolObj == null)
- {
- return false;
- }
- return true;
- }
- }
-
- #endregion
-
- #region 端口操作
-
- /// <summary>
- /// 判断端口是否被占用
- /// </summary>
- /// <param name="port"></param>
- /// <returns></returns>
- public static bool IsPortUsing(int port)
- {
- bool inUse = false;
-
- IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();
- IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners();
-
- foreach (IPEndPoint endPoint in ipEndPoints)
- {
- if (endPoint.Port == port)
- {
- inUse = true;
- break;
- }
- }
- return inUse;
- }
- #endregion
-
- #region 站点操作
-
- /// <summary>
- /// 获取所有的站点
- /// </summary>
- /// <returns></returns>
- public static List<string> GetAllSites()
- {
- using (ServerManager serverManager = new ServerManager())
- {
- return serverManager.Sites.Select(it => it.Name).ToList();
- }
- }
-
- /// <summary>
- /// 创建站点
- /// </summary>
- /// <param name="siteName">站点名称</param>
- /// <param name="path">站点路径</param>
- /// <param name="port">端口</param>
- /// <param name="host">主机</param>
- /// <param name="requestType">请求类型:http或者https</param>
- public static void CreateSite(string siteName, string path, string port = "8000", string host = "*", string adminUserName = "", string adminPassword = "", string requestType = "http")
- {
- using (ServerManager serverManager = new ServerManager())
- {
- var sites = serverManager.Sites;
- if (sites[siteName] == null)
- {
- var site = sites.Add(siteName, requestType, $"{host}:{port}:", path);
- if (!string.IsNullOrEmpty(adminUserName) && !string.IsNullOrEmpty(adminPassword))
- {
- var virtualDic = site.Applications[0].VirtualDirectories[0];
- virtualDic.UserName = adminUserName;
- virtualDic.Password = adminPassword;
- }
- serverManager.CommitChanges();
- }
- }
- }
-
- /// <summary>
- /// 获取站点
- /// </summary>
- /// <param name="serverManager"></param>
- /// <param name="siteName"></param>
- /// <returns></returns>
- private static Site GetSite(ServerManager serverManager, string siteName)
- {
- return serverManager.Sites[siteName];
- }
-
- /// <summary>
- /// 获取站点
- /// </summary>
- /// <param name="siteName"></param>
- /// <returns></returns>
- public static Site GetSite(string siteName)
- {
- return GetSite(siteName);
- }
-
- /// <summary>
- /// 判断站点是否存在
- /// </summary>
- /// <param name="siteName"></param>
- /// <returns></returns>
- public static bool IsSiteExisted(string siteName)
- {
- using (var serverManager = new ServerManager())
- {
- if (serverManager.Sites[siteName] == null)
- {
- return false;
- }
- return true;
- }
- }
-
- /// <summary>
- /// 获取站点的物理路径
- /// </summary>
- /// <param name="siteName"></param>
- /// <returns></returns>
- public static string GetSitePhysicalPath(string siteName)
- {
- using (ServerManager serverManager = new ServerManager())
- {
- var app = serverManager.Sites[siteName].Applications.Where(it => it.Path == "/").SingleOrDefault();
- if (app != null)
- {
- return app.VirtualDirectories[0].PhysicalPath;
- }
- else
- {
- return "";
- }
- }
- }
-
- #endregion
-
- #region 应用程序操作
- /// <summary>
- /// 判断应用程序是否存在
- /// </summary>
- /// <param name="siteName"></param>
- /// <param name="appName"></param>
- /// <returns></returns>
- public static bool IsApplicationExisted(string siteName, string appName)
- {
- using (ServerManager serverManager = new ServerManager())
- {
- var site = serverManager.Sites[siteName];
- if (GetApplication(serverManager, siteName, appName) == null)
- {
- return false;
- }
- else
- {
- return true;
- }
- }
- }
-
- /// <summary>
- /// 创建应用程序
- /// </summary>
- /// <param name="siteName"></param>
- /// <param name="applicationName"></param>
- /// <param name="path"></param>
- public static void CreateApplication(string siteName, string applicationName, string path)
- {
- using (ServerManager serverManager = new ServerManager())
- {
- var site = GetSite(serverManager, siteName);
- var config = site.GetWebConfiguration();
- var applications = site.Applications;
- if (applications["/" + applicationName] == null)
- {
- var app = applications.Add("/" + applicationName, path);
- serverManager.CommitChanges();
- }
- }
- }
-
- /// <summary>
- /// 创建虚拟路径
- /// </summary>
- /// <param name="siteName">站点名称</param>
- /// <param name="applicationName">应用名称</param>
- /// <param name="virtualDirectoryName">虚拟路径名称</param>
- /// <param name="path">路径</param>
- public static void CreateVirtualDirectory(string siteName, string applicationName, string virtualDirectoryName, string path)
- {
- using (ServerManager serverManager = new ServerManager())
- {
- Application application = GetApplication(serverManager, siteName, applicationName);
- application.VirtualDirectories.Add("/" + virtualDirectoryName, path);
- serverManager.CommitChanges();
- }
- }
-
- / <summary>
- / 给站点设置应用程序池
- / </summary>
- / <param name="siteName">站点名称</param>
- / <param name="applicationPoolName">应用名称</param>
- //public static void SetApplicationApplicationPool(string siteName, string applicationPoolName, string adminUserName = "", string adminPassword = "")
- //{
- // using (ServerManager serverManager = new ServerManager())
- // {
- // var site = GetSite(serverManager, siteName);
- // if (site != null)
- // {
- // Application application = GetApplication(serverManager, siteName, applicationPoolName);
- // if (application != null)
- // {
- // application.ApplicationPoolName = applicationPoolName;
- // if (!string.IsNullOrEmpty(adminUserName) && !string.IsNullOrEmpty(adminPassword))
- // {
- // application.VirtualDirectories[0].UserName = adminUserName;
- // application.VirtualDirectories[0].Password = adminPassword;
- // }
- // }
- // }
- // serverManager.CommitChanges();
- // }
- //}
-
- /// <summary>
- /// 给应用程序设置应用程序池
- /// </summary>
- /// <param name="siteName">站点名称</param>
- /// <param name="appName">引用程序名称</param>
- /// <param name="applicationPoolName">引用程序池名称</param>
- /// <param name="adminUserName">连接为用户名</param>
- /// <param name="adminPassword">连接为用户密码</param>
- public static void SetApplicationApplicationPool(string siteName, string appName, string applicationPoolName, string adminUserName = "", string adminPassword = "")
- {
- using (ServerManager serverManager = new ServerManager())
- {
- var site = GetSite(serverManager, siteName);
- if (site != null)
- {
- Application application = GetApplication(serverManager, siteName, appName);
- if (application != null)
- {
- application.ApplicationPoolName = applicationPoolName;
- if (!string.IsNullOrEmpty(adminUserName) && !string.IsNullOrEmpty(adminPassword))
- {
- application.VirtualDirectories[0].UserName = adminUserName;
- application.VirtualDirectories[0].Password = adminPassword;
- }
- }
- }
- serverManager.CommitChanges();
- }
- }
-
- /// <summary>
- /// 获取指定站点的应用程序
- /// </summary>
- /// <param name="serverManager">服务器管理对象</param>
- /// <param name="siteName">站点名称</param>
- /// <param name="applicationName">应用程序名称</param>
- /// <returns></returns>
- private static Application GetApplication(ServerManager serverManager, string siteName, string applicationName)
- {
- var site = serverManager.Sites[siteName];
- if (site == null)
- {
- throw new Exception($"名称{siteName}为站点不存在!");
- }
- if (applicationName != "/")
- {
- applicationName = "/" + applicationName;
- }
- return site.Applications.Where(it => it.Path == (applicationName)).FirstOrDefault();
- }
- #endregion
-
- #region IIS操作
- /// <summary>
- /// 判断IIS服务器是否存在
- /// </summary>
- /// <returns></returns>
- public static bool IsIISExist()
- {
- return ExistService("W3SVC");
- }
-
- /// <summary>
- /// 判断IIS服务器是否存在
- /// </summary>
- /// <returns></returns>
- public static bool ExistService(string serviceName)
- {
- var services = ServiceController.GetServices();
- return services.Count(it => it.ServiceName.Equals(serviceName, StringComparison.Ordinal)) > 0;
- }
-
- /// <summary>
- /// 判断IIS服务器是否在运行
- /// </summary>
- /// <returns></returns>
- public static bool IsIISRunning()
- {
- var services = ServiceController.GetServices();
- return services.Count(it => it.ServiceName == "W3SVC" && it.Status == ServiceControllerStatus.Running) > 0;
- }
- #endregion
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。