//-----------------------------------------------------------------------
// <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. 关于Python, ftplib模块中的cwd()进入含中文目录失败的问题

    使用Python的ftplib模块连接ftp服务器时, 使用cwd()连接含中文的目录, 报错 : UnicodeEncodeError: 'latin-1' codec can't encode c ...

  2. 搭建一个dubbo+zookeeper平台

    本篇主要是来分享从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用. 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后 ...

  3. 列表、enumerate()函数,以及查看数据类型所有的内置方法

    随便看看 """ forList(): 测试list和enumerate()函数 examineFun(): 查看数据类型所有的内置方法 ""&quo ...

  4. PyCharm使用小技巧

    本文部分内容参考了明宇李前辈的博客,原文请阅读 Pycharm的配置(背景颜色,字体,解释器等): 鼠标滑轮控制字体大小 部分参考了墨颜前辈的博客,原文请阅读 用鼠标滑轮控制代码字体大小: 感谢各位前 ...

  5. mysql的函数与储存过程与pymysql的配合使用

    现在mysql上定义一个函数,一个储存过程 函数: delimiter \\ CREATE FUNCTION f2 ( num2 INT, num1 INT ) RETURNS INT BEGIN D ...

  6. vue 组件中的钩子函数 不能直接写this

    export default { data(){ return { num: 18 } }, beforeRouteEnter(to, from, next){ next(vm=>{ vm.nu ...

  7. shell中的EOF用法

    重定位运算符 >> 是追加内容> 是覆盖原有内容 1.EOF Shell中通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止 ...

  8. PHP依赖注入原理与用法分析

    https://www.jb51.net/article/146025.htm 本文实例讲述了PHP依赖注入原理与用法.分享给大家供大家参考,具体如下: 引言 依然是来自到喜啦的一道面试题,你知道什么 ...

  9. (六)List All Indices

    Now let’s take a peek at our indices: 现在让我们来看看我们的指数: GET /_cat/indices?v And the response: health st ...

  10. iOS开发基础-九宫格坐标(4)

    对iOS开发基础-九宫格坐标(3)的代码进行进一步优化. 新建一个 UIView 的子类,并命名为 WJQAppView ,将 appxib.xib 中的 UIView 对象与新建的视图类进行关联. ...