//-----------------------------------------------------------------------
// <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">"*:&lt;port&gt;:&lt;hostname&gt;" <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的更多相关文章

  1. C#操作IIS程序池及站点的创建配置

    最近在做一个WEB程序的安装包:对一些操作IIS进行一个简单的总结:主要包括对IIS进行站点的新建以及新建站点的NET版本的选择,还有针对IIS7程序池的托管模式以及版本的操作:首先要对Microso ...

  2. C# 使用代码来操作 IIS

    由于需要维护网站的时候,可以自动将所有的站点HTTP重定向到指定的静态页面上. 要操作 IIS 主要使用到的是“Microsoft.Web.Administration.dll”. 该类库不可以在引用 ...

  3. C#操作IIS完整解析

    原文:C#操作IIS完整解析 最近在为公司实施做了一个工具,Silverlight部署早已是轻车熟路, 但对于非技术人员来说却很是头疼的一件事,当到现场实施碰到客户情况也各不相同, 急需一个类似系统备 ...

  4. .net操作IIS,新建网站,新建应用程序池,设置应用程序池版本,设置网站和应用程序池的关联

    ServerManager类用来操作IIS,提供了很多操作IIS的API.使用ServerManager必须引用Microsoft.Web.Administration.dll,具体路径为:%wind ...

  5. 利用ASP.NET操作IIS (可以制作安装程序)

    很多web安装程序都会在IIS里添加应用程序或者应用程序池,早期用ASP.NET操作IIS非常困难,不过,从7.0开始,微软提供了 Microsoft.Web.Administration 类,可以很 ...

  6. C#操作IIS程序池及站点的创建配置(转)

      原文:http://www.cnblogs.com/wujy/archive/2013/02/28/2937667.html 最近在做一个WEB程序的安装包:对一些操作IIS进行一个简单的总结:主 ...

  7. C#操作IIS服务

    进入正题:先从使用角度来讲解IIS操作,然后再深入到具体的IIS服务底层原理. [1]前提掌握要点: (1).IIS到目前经历了四个版本分别为 IIS4.0 IIS5.0 IIS6.0 IIS7.0, ...

  8. IISHelper操作iis

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. c#操作IIS站点

    /// <summary> /// 获取本地IIS版本 /// </summary> /// <returns></returns> public st ...

随机推荐

  1. django源码分析 python manage.py runserver

    django是一个快速开发web应用的框架, 笔者也在django框架上开发不少web应用,闲来无事,就想探究一下django底层到底是如何实现的,本文记录了笔者对django源码的分析过程 I be ...

  2. SQL Server数据库————连接查询和分组查询

    SQL Server数据库————连接查询和分组查询 分组查询 select 列from  <表名> where  …… group by  列 注意:跟order  by一样group ...

  3. Camera Binning Mode

    Camera Binning Mode:像素合并模式,将相邻的像素单元电荷通过物理的方法叠加在一起作为一个像素输出信号: 水平方向Binning:  同列相邻行的电荷叠加 垂直方向Binning:   ...

  4. 【转载】DSP基础--定点小数运算

    在FPGA实现算法过程中,大多数情况是用占用资源较少,延迟较低的定点数代替浮点数参与运算.那么浮点与定点数之间的区别以及转换方式是怎么的?下边这篇博文详细说明了这一问题.虽然是针对DSP芯片的,但思想 ...

  5. Linux学习历程——Centos 7 grep命令

    一.命令简介 grep 命令用于在文本中执行关键词搜索,并显示匹配的结果. 由于grep命令参数很多,这里只列出一些常用的参数. 参数 作用 -b 将可执行文件当作文本文件来搜索 -c 仅显示找到的行 ...

  6. python文章装饰器理解12步

    1. 函数 在python中,函数通过def关键字.函数名和可选的参数列表定义.通过return关键字返回值.我们举例来说明如何定义和调用一个简单的函数: def foo(): return 1 fo ...

  7. SQLServer约束介绍

    约束定义 对于数据库来说,基本表的完整性约束分为列级约束条件和表级约束条件: 列级约束条件        列级约束条件是对某一个特定列的约束,包含在列定义中,可以直接跟在该列的其他定义之后,用空格分隔 ...

  8. 极光推送JAVA代码示例

    一. 准备工作 1. 登录极光推送官网https://www.jpush.cn/,注册账号并登录 2. 创建应用 创建应用过程,详见百度经验:http://jingyan.baidu.com/arti ...

  9. iOS开发基础-KVC简单介绍

    一.KVC介绍 键值编码(Key Value Coding,KVC):使开发者不必进行任何操作就可以进行属性的动态读写. KVC操作方法由 NSKeyValueCoding 协议提供,而 NSObje ...

  10. 使用FaceNet 图像相识度对比

    1. 模型结构: