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 ...
随机推荐
- 【English】一、专治各种英语不服
一.前言 英语虽然不是使用人数最多的语言,但是...谁叫我是一名码农且英语垃圾呢. 二.开始 1. read sb sth = read sth for sb read sb sth 是双宾语结构. ...
- 以太坊智能合约 Solidity 的常用数据类型介绍
目录 目录 1.数组 1.1.对数组的增删改查操作. 2.String.Bytes.Mapping的使用 3.Enums 和 Structs 的简单应用 4.Ether 单位和 Time 单位 5.A ...
- GoldenDict词典的超级实用高级玩法----全文搜索功能
快捷键: Ctrl+Shift+F 菜单进入:搜索--全文搜索 模式:正则表达式 比如:我想知道地道的英文表达 请xx天/周/年假 给搜索框写入正则表达式 请(.)(天|周|年)假 就可以了 ...
- django 创建admin用户名跟密码
一.django中创建用户名和密码 (venv) D:\project\py37project\Djangopro\Procrm>Python37 manage.py createsuperus ...
- java类加载及类初始化
1.前言 java是跨平台语言,主要是因为它的java虚拟机的存在,java有事编译语言,所以需要将编写的java文件编译成jvm可运用的class字节码文件.在java中一切皆对象.对于Java虚拟 ...
- UVALive - 3713 - Astronauts(图论——2-SAT)
Problem UVALive - 3713 - Astronauts Time Limit: 3000 mSec Problem Description Input The input cont ...
- centos查看系统信息命令
1.cd - :返回上次所在的目录 2.查看系统版本 cat /etc/redhat-release 3.查看linux内核版本1)cat /proc/version 2) uname -a3) un ...
- 【Topcoder 1643】PossibleOrders
题意:给一些等价关系,问把所有的数按照大小排序的种类数. 思路:首先并查集维护等价类,然后设有\(n\)个等价类. 那么就可以\(dp\)了. 考虑\(dp(i)\)表示还剩下\(i\)个等价类,答案 ...
- ZJOI2019做题笔记
麻将(期望.DP套DP) 先考虑如何计算一个子集是否能胡. 设\(f_{i,0/1,j,k}\)表示考虑了子集中\(1 \sim i\)的牌,是否找到对子,\(i-1,i,i+1\)预计拿\(j\)个 ...
- React-关于react的思考
声明式开发 减少dom操作,减少代码量 可以与其他框架并存 组件化开发 单向数据流 视图层框架 大型项目需要与其他数据层框架一起使用 函数式编程 方便自动化测试