c#操作IIS之IISHelper
//-----------------------------------------------------------------------
// <copyright file="IISHelper.cs" company="MY EXPRESS, Ltd.">
// Copyright (c) 2016 , All rights reserved.
// </copyright>
//----------------------------------------------------------------------- using System;
using Microsoft.Web.Administration; namespace DotNet.MVCInfrastructure.Helpers
{
using DotNet.Utilities; /// <summary>
/// IIS应用
/// Microsoft中提供了管理IIS7的一些非常强大的API——Microsoft.Web.Administration,
/// 可以很方便的让我们以编程的方式管理,设定IIS 7的各项配置。
/// Microsoft.Web.Administration.dll位于IIS的目录(%WinDir%\System32\InetSrv)下,
/// 在项目中添加对其的引用后您就可以使用这些API了
///
///
/// 错误: 由于权限不足而无法读取配置文件 文件名: redirection.config
/// 解决办法 选择该网站的应用程序池的高级设置里进程模型下的标识选择为LocalSystem
///
/// 修改纪录
///
/// 2018-09-10版本:1.0 SongBiao 创建文件。
///
/// <author>
/// <name>SongBiao</name>
/// <date>2018-09-10</date>
/// </author>
/// </summary> public partial class IISHelper
{
/// <summary>
/// 停止一个站点
/// </summary> public static BaseResult StopSite(string site)
{
BaseResult result = BaseResult.Fail("未知错误");
try
{
ServerManager iisManager = new ServerManager();
if (iisManager.Sites[site].State == ObjectState.Stopped || iisManager.Sites[site].State == ObjectState.Stopping)
{
result.Status = true;
result.StatusMessage = site + ":站点已停止";
}
else
{
ObjectState state = iisManager.Sites[site].Stop();
if (state == ObjectState.Stopping || state == ObjectState.Stopped)
{
result.Status = true;
result.StatusMessage = site + ":站点已停止";
}
else
{
result.Status = false;
result.StatusMessage = site + ":站点停止失败";
}
}
}
catch (Exception ex)
{
NLogHelper.Warn(ex, " public static BaseResult StopSite(string site)");
result.Status = false;
result.StatusMessage = site + ":站点停止出现异常:" + ex.Message;
} return result;
} /// <summary>
/// 启动一个站点
/// </summary> public static BaseResult StartSite(string site)
{
BaseResult result = BaseResult.Fail("未知错误");
try
{
ServerManager iisManager = new ServerManager();
if (iisManager.Sites[site].State != ObjectState.Started || iisManager.Sites[site].State != ObjectState.Starting)
{
ObjectState state = iisManager.Sites[site].Start();
if (state == ObjectState.Starting || state == ObjectState.Started)
{
result.Status = true;
result.StatusMessage = site + ":站点已启动";
}
else
{
result.Status = false;
result.StatusMessage = site + ":站点停止失败";
}
}
else
{
result.Status = true;
result.StatusMessage = site + ":站点已是启动状态";
}
}
catch (Exception ex)
{
NLogHelper.Warn(ex, " public static BaseResult StartSite(string site)");
result.Status = false;
result.StatusMessage = site + ":站点停止出现异常:" + ex.Message;
} return result;
} /// <summary>
/// 停止应用程序池
/// </summary>
/// <param name="appPool"></param>
public static BaseResult StopApplicationPool(string appPool = null)
{
BaseResult result = BaseResult.Fail("未知错误");
try
{
if (string.IsNullOrWhiteSpace(appPool))
{
appPool = Environment.GetEnvironmentVariable("APP_POOL_ID", EnvironmentVariableTarget.Process);
}
ServerManager iisManager = new ServerManager();
if (iisManager.ApplicationPools[appPool].State == ObjectState.Stopped || iisManager.ApplicationPools[appPool].State == ObjectState.Stopping)
{
result.Status = true;
result.StatusMessage = appPool + ":应用程序池已停止";
}
else
{
ObjectState state = iisManager.ApplicationPools[appPool].Stop();
if (state == ObjectState.Stopping || state == ObjectState.Stopped)
{
result.Status = true;
result.StatusMessage = appPool + ":应用程序池已停止";
}
else
{
result.Status = false;
result.StatusMessage = appPool + ":应用程序池停止失败,请重试";
}
}
}
catch (Exception ex)
{
NLogHelper.Warn(ex, " public static BaseResult StopApplicationPool(string appPool = null)");
result.Status = false;
result.StatusMessage = appPool + ":应用程序池失败出现异常:" + ex.Message;
} return result;
} /// <summary>
/// 启动应用程序池
/// </summary>
/// <param name="appPool"></param>
public static BaseResult StartApplicationPool(string appPool = null)
{
BaseResult result = BaseResult.Fail("未知错误");
try
{
if (string.IsNullOrWhiteSpace(appPool))
{
appPool = Environment.GetEnvironmentVariable("APP_POOL_ID", EnvironmentVariableTarget.Process);
}
ServerManager iisManager = new ServerManager();
if (iisManager.ApplicationPools[appPool].State != ObjectState.Started || iisManager.ApplicationPools[appPool].State != ObjectState.Starting)
{
ObjectState state = iisManager.ApplicationPools[appPool].Start();
if (state == ObjectState.Starting || state == ObjectState.Started)
{
result.Status = true;
result.StatusMessage = appPool + ":应用程序池已启动";
}
else
{
result.Status = false;
result.StatusMessage = appPool + ":应用程序池启动失败,请重试";
}
}
else
{
result.Status = true;
result.StatusMessage = appPool + ":应用程序池已是启动状态";
}
}
catch (Exception ex)
{
NLogHelper.Warn(ex, " public static BaseResult StartApplicationPool(string appPool = null)");
result.Status = false;
result.StatusMessage = appPool + ":应用程序池启动出现异常:" + ex.Message;
} return result;
} /// <summary>
/// 回收应用程序池
/// </summary>
/// <param name="appPool"></param>
public static BaseResult RecycleApplicationPool(string appPool = null)
{
BaseResult result = BaseResult.Fail("未知错误");
try
{
if (string.IsNullOrWhiteSpace(appPool))
{
appPool = Environment.GetEnvironmentVariable("APP_POOL_ID", EnvironmentVariableTarget.Process);
}
ServerManager iisManager = new ServerManager();
ObjectState state = iisManager.ApplicationPools[appPool].Recycle(); result.Status = true;
result.StatusMessage = appPool + ":应用程序池回收成功:"+ state; }
catch (Exception ex)
{
NLogHelper.Warn(ex, " public static BaseResult StartApplicationPool(string appPool = null)");
result.Status = false;
result.StatusMessage = appPool + ":应用程序池回收出现异常:" + ex.Message;
} return result;
} /// <summary>
/// 运行时控制:得到当前正在处理的请求
/// </summary>
/// <param name="appPool"></param>
public static void GetWorking(string appPool)
{
ServerManager iisManager = new ServerManager();
foreach (WorkerProcess w3wp in iisManager.WorkerProcesses)
{
Console.WriteLine("W3WP ({0})", w3wp.ProcessId);
foreach (Request request in w3wp.GetRequests())
{
Console.WriteLine("{0} - {1},{2},{3}",
request.Url,
request.ClientIPAddr,
request.TimeElapsed,
request.TimeInState);
}
}
} /// <summary>
/// 获取IIS日志文件路径
/// </summary>
/// <returns></returns> public static string GetIISLogPath()
{
ServerManager manager = new ServerManager();
// 获取IIS配置文件:applicationHost.config
var config = manager.GetApplicationHostConfiguration();
var log = config.GetSection("system.applicationHost/log");
var logFile = log.GetChildElement("centralW3CLogFile");
//获取网站日志文件保存路径
var logPath = logFile.GetAttributeValue("directory").ToString();
return logPath;
} /// <summary>
///创建新站点
/// </summary>
/// <param name="siteName"></param>
/// <param name="bindingInfo">"*:<port>:<hostname>" <example>"*:80:myhost.com"</example></param>
/// <param name="physicalPath"></param>
public static void CreateSite(string siteName, string bindingInfo, string physicalPath)
{
createSite(siteName, "http", bindingInfo, physicalPath, true, siteName + "Pool", ProcessModelIdentityType.NetworkService, null, null, ManagedPipelineMode.Integrated, null);
} /// <summary>
/// 创建新站点
/// </summary>
/// <param name="siteName"></param>
/// <param name="protocol"></param>
/// <param name="bindingInformation"></param>
/// <param name="physicalPath"></param>
/// <param name="createAppPool"></param>
/// <param name="appPoolName"></param>
/// <param name="identityType"></param>
/// <param name="appPoolUserName"></param>
/// <param name="appPoolPassword"></param>
/// <param name="appPoolPipelineMode"></param>
/// <param name="managedRuntimeVersion"></param>
private static void createSite(string siteName, string protocol, string bindingInformation, string physicalPath,
bool createAppPool, string appPoolName, ProcessModelIdentityType identityType,
string appPoolUserName, string appPoolPassword, ManagedPipelineMode appPoolPipelineMode, string managedRuntimeVersion)
{
using (ServerManager mgr = new ServerManager())
{
Site site = mgr.Sites.Add(siteName, protocol, bindingInformation, physicalPath); // PROVISION APPPOOL IF NEEDED
if (createAppPool)
{
ApplicationPool pool = mgr.ApplicationPools.Add(appPoolName);
if (pool.ProcessModel.IdentityType != identityType)
{
pool.ProcessModel.IdentityType = identityType;
}
if (!String.IsNullOrEmpty(appPoolUserName))
{
pool.ProcessModel.UserName = appPoolUserName;
pool.ProcessModel.Password = appPoolPassword;
}
if (appPoolPipelineMode != pool.ManagedPipelineMode)
{
pool.ManagedPipelineMode = appPoolPipelineMode;
} site.Applications["/"].ApplicationPoolName = pool.Name;
} mgr.CommitChanges();
}
} /// <summary>
/// Delete an existent web site.
/// </summary>
/// <param name="siteName">Site name.</param>
public static void DeleteSite(string siteName)
{
using (ServerManager mgr = new ServerManager())
{
Site site = mgr.Sites[siteName];
if (site != null)
{
mgr.Sites.Remove(site);
mgr.CommitChanges();
}
}
} /// <summary>
/// 创建虚拟目录
/// </summary>
/// <param name="siteName"></param>
/// <param name="vDirName"></param>
/// <param name="physicalPath"></param>
public static void CreateVDir(string siteName, string vDirName, string physicalPath)
{
using (ServerManager mgr = new ServerManager())
{
Site site = mgr.Sites[siteName];
if (site == null)
{
throw new ApplicationException(String.Format("Web site {0} does not exist", siteName));
}
site.Applications.Add("/" + vDirName, physicalPath);
mgr.CommitChanges();
}
} /// <summary>
/// 删除虚拟目录
/// </summary>
/// <param name="siteName"></param>
/// <param name="vDirName"></param>
public static void DeleteVDir(string siteName, string vDirName)
{
using (ServerManager mgr = new ServerManager())
{
Site site = mgr.Sites[siteName];
if (site != null)
{
Microsoft.Web.Administration.Application app = site.Applications["/" + vDirName];
if (app != null)
{
site.Applications.Remove(app);
mgr.CommitChanges();
}
}
}
} /// <summary>
/// Delete an existent web site app pool.
/// </summary>
/// <param name="appPoolName">App pool name for deletion.</param>
public static void DeletePool(string appPoolName)
{
using (ServerManager mgr = new ServerManager())
{
ApplicationPool pool = mgr.ApplicationPools[appPoolName];
if (pool != null)
{
mgr.ApplicationPools.Remove(pool);
mgr.CommitChanges();
}
}
} /// <summary>
/// 在站点上添加默认文档。
/// </summary>
/// <param name="siteName"></param>
/// <param name="defaultDocName"></param>
public static void AddDefaultDocument(string siteName, string defaultDocName)
{
using (ServerManager mgr = new ServerManager())
{
Configuration cfg = mgr.GetWebConfiguration(siteName);
ConfigurationSection defaultDocumentSection = cfg.GetSection("system.webServer/defaultDocument");
ConfigurationElement filesElement = defaultDocumentSection.GetChildElement("files");
ConfigurationElementCollection filesCollection = filesElement.GetCollection(); foreach (ConfigurationElement elt in filesCollection)
{
if (elt.Attributes["value"].Value.ToString() == defaultDocName)
{
return;
}
} try
{
ConfigurationElement docElement = filesCollection.CreateElement();
docElement.SetAttributeValue("value", defaultDocName);
filesCollection.Add(docElement);
}
catch (Exception) { } //this will fail if existing mgr.CommitChanges();
}
} /// <summary>
/// 检查虚拟目录是否存在。
/// </summary>
/// <param name="siteName"></param>
/// <param name="path"></param>
/// <returns></returns> public static bool VerifyVirtualPathIsExist(string siteName, string path)
{
using (ServerManager mgr = new ServerManager())
{
Site site = mgr.Sites[siteName];
if (site != null)
{
foreach (Microsoft.Web.Administration.Application app in site.Applications)
{
if (app.Path.ToUpper().Equals(path.ToUpper()))
{
return true;
}
}
}
} return false;
} /// <summary>
/// 检查站点是否存在。
/// </summary>
/// <param name="siteName"></param>
/// <returns></returns>
public static bool VerifyWebSiteIsExist(string siteName)
{
using (ServerManager mgr = new ServerManager())
{
for (int i = ; i < mgr.Sites.Count; i++)
{
if (mgr.Sites[i].Name.ToUpper().Equals(siteName.ToUpper()))
{
return true;
}
}
} return false;
} /// <summary>
/// 检查Bindings信息。
/// </summary>
/// <param name="bindingInfo"></param>
/// <returns></returns>
public static bool VerifyWebSiteBindingsIsExist(string bindingInfo)
{
string temp = string.Empty;
using (ServerManager mgr = new ServerManager())
{
for (int i = ; i < mgr.Sites.Count; i++)
{
foreach (Microsoft.Web.Administration.Binding b in mgr.Sites[i].Bindings)
{
temp = b.BindingInformation;
if (temp.IndexOf('*') < )
{
temp = "*" + temp;
}
if (temp.Equals(bindingInfo))
{
return true;
}
}
}
} return false;
} }
}
c#操作IIS之IISHelper的更多相关文章
- C#操作IIS程序池及站点的创建配置
最近在做一个WEB程序的安装包:对一些操作IIS进行一个简单的总结:主要包括对IIS进行站点的新建以及新建站点的NET版本的选择,还有针对IIS7程序池的托管模式以及版本的操作:首先要对Microso ...
- C# 使用代码来操作 IIS
由于需要维护网站的时候,可以自动将所有的站点HTTP重定向到指定的静态页面上. 要操作 IIS 主要使用到的是“Microsoft.Web.Administration.dll”. 该类库不可以在引用 ...
- C#操作IIS完整解析
原文:C#操作IIS完整解析 最近在为公司实施做了一个工具,Silverlight部署早已是轻车熟路, 但对于非技术人员来说却很是头疼的一件事,当到现场实施碰到客户情况也各不相同, 急需一个类似系统备 ...
- .net操作IIS,新建网站,新建应用程序池,设置应用程序池版本,设置网站和应用程序池的关联
ServerManager类用来操作IIS,提供了很多操作IIS的API.使用ServerManager必须引用Microsoft.Web.Administration.dll,具体路径为:%wind ...
- 利用ASP.NET操作IIS (可以制作安装程序)
很多web安装程序都会在IIS里添加应用程序或者应用程序池,早期用ASP.NET操作IIS非常困难,不过,从7.0开始,微软提供了 Microsoft.Web.Administration 类,可以很 ...
- C#操作IIS程序池及站点的创建配置(转)
原文:http://www.cnblogs.com/wujy/archive/2013/02/28/2937667.html 最近在做一个WEB程序的安装包:对一些操作IIS进行一个简单的总结:主 ...
- C#操作IIS服务
进入正题:先从使用角度来讲解IIS操作,然后再深入到具体的IIS服务底层原理. [1]前提掌握要点: (1).IIS到目前经历了四个版本分别为 IIS4.0 IIS5.0 IIS6.0 IIS7.0, ...
- IISHelper操作iis
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- c#操作IIS站点
/// <summary> /// 获取本地IIS版本 /// </summary> /// <returns></returns> public st ...
随机推荐
- HttpWebRequest 改为 HttpClient 踩坑记-请求头设置
HttpWebRequest 改为 HttpClient 踩坑记-请求头设置 Intro 这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebR ...
- 监控 redis 执行命令
监控 redis 执行命令 Intro 最近在用 redis 的时候想看看执行了哪些命令,于是发现了 redis-cli 提供的 Monitor 命令,直接使用这个就可以监控执行的大部分 redis ...
- python读取txt文件最后一行(文件大+文件小)
txt文件小 #coding:utf-8 ''' fname为所读xx.txt文件 输出为:文件第一行和最后一行 ''' fname = 'test.txt' with open(fname, 'r' ...
- UE4分支的Git Flow
UE4作为开源商业引擎,其代码托管在私有库:https://github.com/EpicGames/UnrealEngine 为了能看到并下载UE4的代码,开发者需要有GitHub账号和Unreal ...
- SQL Server 关于 Table 字典数据的查询SQL
分享一个关于查询SQL Server Table 结构的SQL 语句. T-SQL 如下: SELECT (case when a.colorder=1 then d.name else '' end ...
- c/c++ 网络编程 UDP 主机网络信息取得
网络编程 UDP 主机网络信息取得 1,if_nametoindex 通过网卡名字取得网卡编号 2,if_indextoname 通过网卡编号取得网卡名字 #include <stdio.h&g ...
- LeetCode算法题-Array Partition I(Java实现)
这是悦乐书的第262次更新,第275篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第129题(顺位题号是561).给定一个2n个整数的数组,你的任务是将这些整数分组为n对 ...
- Python基础——2函数
函数 函数定义 def a(参数): 函数的参数:必选参数.默认参数.可变参数.命名关键字参数和关键字参数 a(x,y,z=11,*l,**b): a(x,y,z=11,*liat,city,job, ...
- Linux Collection:网络配置
PAS 缺少ifconfig 安装相应软件[不推荐],尽量使用 ip 命令 sudo apt install gnome-nettool 补充,显示IP地址: ip show address PAS ...
- idea spring-boot总结
1. 按自己重新配置spring-boot pom点进 mybatis-spring-boot-starter ,在要改的里面 <version>3.4.4</version> ...