C# 操作IIS加强版(添加,删除,启动,暂停网站,默认页,绑定信息)

主要功能如下

  1. 在本机的IIS创建Web网站
  2. 删除网站包括应用程序池
  3. 删除应用程序池
  4. 添加默认文档
  5. 删除默认文档
  6. 添加虚拟目录
  7. 删除虚拟目录
  8. 启动网站
  9. 暂停网站
  10. 根据网站名获取网站信息
  11. 获取所有网站的的网站数据
  12. 添加绑定信息(IP,端口,域名)
  13. 删除绑定信息
using Microsoft.Web.Administration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace AutoIIS.Helper
{
/// <summary>
/// IIS操作类
/// </summary>
public class IISHelper
{
#region 创建网站
/// <summary>
/// 在本机的IIS创建Web网站
/// </summary>
/// <param name="siteName">网站名</param>
/// <param name="bindingInfo">host <example>"*:80:myhost.com"</example></param>
/// <param name="physicalPath">网站路径</param>
/// <returns>成功返回True,失败返回false</returns>
public static bool CreateSite(string siteName, string bindingInfo, string physicalPath)
{
return CreateSite(siteName, "http", bindingInfo, physicalPath, true, siteName, ProcessModelIdentityType.ApplicationPoolIdentity, null, null, ManagedPipelineMode.Integrated, null);
}
/// <summary>
/// 在本机的IIS创建Web网站
/// </summary>
/// <param name="siteName">网站名</param>
/// <param name="protocol">http头</param>
/// <param name="bindingInformation">网站例如<example>"*:80:[url=http://www.sufeinet.com]www.sufeinet.com[/url]"</example></param>
/// <param name="physicalPath">网站的路径</param>
/// <param name="createAppPool">是否创建应用程序程序池</param>
/// <param name="appPoolName">应用程序名</param>
/// <param name="identityType">标识</param>
/// <param name="appPoolUserName">用户名没有时用户名为Null即可</param>
/// <param name="appPoolPassword">密码</param>
/// <param name="appPoolPipelineMode">模式,经典还是集成</param>
/// <param name="managedRuntimeVersion">.net版本</param>
/// <returns>成功返回True,失败返回false</returns>
public static bool 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())
{
//删除网站和应用程序池
DeleteSite(siteName);
Site site = mgr.Sites.Add(siteName, protocol, bindingInformation.ToLower(), 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;
}
if (site != null)
{
mgr.CommitChanges();
return true;
}
}
return false;
} #endregion #region 删除网站和应用程序池
/// <summary>
/// 删除网站包括应用程序池
/// </summary>
/// <param name="siteName">网站名</param>
/// <param name="isAppPool">是否删除应用程序池默认为删除</param>
/// <returns>成功返回True,失败返回false</returns>
public static bool DeleteSite(string siteName, Boolean isAppPool = true)
{
using (ServerManager mgr = new ServerManager())
{
//判断web应用程序是否存在
if (mgr.Sites[siteName] != null)
{
if (isAppPool)
{
//判断应用程序池是否存在
if (mgr.ApplicationPools[siteName] != null)
{
mgr.ApplicationPools.Remove(mgr.ApplicationPools[siteName]);
}
}
mgr.Sites.Remove(mgr.Sites[siteName]);
mgr.CommitChanges();
return true;
}
else
{
return false;
}
}
}
/// <summary>
/// 删除应用程序池
/// </summary>
/// <param name="appPoolName">应用程序池名</param>
/// <returns>成功返回True,失败返回false</returns>
public static bool DeletePool(string appPoolName)
{
using (ServerManager mgr = new ServerManager())
{
ApplicationPool pool = mgr.ApplicationPools[appPoolName];
if (pool != null)
{
mgr.ApplicationPools.Remove(pool);
mgr.CommitChanges();
return true;
}
else
{
return false;
}
}
}
#endregion #region 默认文档 添加和删除
/// <summary>
/// 添加默认文档
/// </summary>
/// <param name="siteName">网站</param>
/// <param name="defaultDocName">默认文档名</param>
/// <returns>成功返回True,失败返回false</returns>
public static bool 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 false;//添加时存在
}
}
try
{
//创建一个新的默认页
ConfigurationElement docElement = filesCollection.CreateElement();
docElement.SetAttributeValue("value", defaultDocName);
filesCollection.Add(docElement);
}
catch (Exception)
{
return false;//添加时发生错误
} mgr.CommitChanges();
}
return true;//添加成功
}
/// <summary>
/// 删除默认文档
/// </summary>
/// <param name="siteName">网站</param>
/// <param name="defaultDocName">默认文档名</param>
/// <returns>成功返回True,失败返回false</returns>
public static bool DeleteDefaultDocument(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(); //创建一个新的默认页
ConfigurationElement docElement = filesCollection.CreateElement(); bool isdefault = false;
//不存在则返回
foreach (ConfigurationElement elt in filesCollection)
{
if (elt.Attributes["value"].Value.ToString() == defaultDocName)
{
docElement = elt;
isdefault = true;
}
}
if (!isdefault)
{
return false;//不存在
}
try
{
filesCollection.Remove(docElement);
}
catch (Exception)
{
return false;//删除时发生错误
} mgr.CommitChanges();
}
return true;//删除成功
}
#endregion #region 虚拟目录添加和删除 /// <summary>
/// 添加虚拟目录
/// </summary>
/// <param name="siteName">网站名</param>
/// <param name="vDirName">目录名</param>
/// <param name="physicalPath">对应的文件夹路径</param>
/// <returns>成功返回True,失败返回false</returns>
public static bool CreateVDir(string siteName, string vDirName, string physicalPath)
{
using (ServerManager mgr = new ServerManager())
{
Site site = mgr.Sites[siteName];
if (site == null)
{
return false;
}
site.Applications.Add("/" + vDirName, physicalPath);
mgr.CommitChanges();
}
return true;
}
/// <summary>
/// 删除虚拟目录
/// </summary>
/// <param name="siteName">网站名</param>
/// <param name="vDirName">目录名</param>
/// <returns>成功返回True,失败返回false</returns>
public static bool DeleteVDir(string siteName, string vDirName)
{
using (ServerManager mgr = new ServerManager())
{
Site site = mgr.Sites[siteName];
if (site == null)
{
return false;
}
site.Applications.Remove(site.Applications["/" + vDirName]);
mgr.CommitChanges();
}
return true;
}
#endregion #region 网站重启,暂停,启动
/// <summary>
/// 启动网站
/// </summary>
/// <param name="siteName">网站名</param>
/// <returns>成功返回True,失败返回false</returns>
public static bool Start(string siteName)
{
try
{
using (ServerManager mgr = new ServerManager())
{
if (mgr.Sites[siteName].State == ObjectState.Stopped)
{
mgr.Sites[siteName].Start();
}
mgr.CommitChanges();
}
}
catch (Exception)
{
return false;
}
return true;
}
/// <summary>
/// 暂停网站
/// </summary>
/// <param name="siteName">网站名</param>
/// <returns>成功返回True,失败返回false</returns>
public static bool Stop(string siteName)
{
try
{
using (ServerManager mgr = new ServerManager())
{
if (mgr.Sites[siteName].State == ObjectState.Started)
{
mgr.Sites[siteName].Stop();
}
mgr.CommitChanges();
}
}
catch (Exception)
{
return false;
}
return true;
}
#endregion #region 获取网站的信息
/// <summary>
/// 根据网站名获取网站信息
/// </summary>
/// <param name="siteName"></param>
/// <returns></returns>
public static Site GetSiteInfo(string siteName)
{
using (ServerManager mgr = new ServerManager())
{
return mgr.Sites[siteName];
}
}
/// <summary>
/// 获取所有的网站数据
/// </summary>
/// <returns>SiteCollection</returns>
public static SiteCollection GetSiteList()
{
using (ServerManager mgr = new ServerManager())
{
return mgr.Sites;
}
}
#endregion
#region 添加绑定信息
/// <summary>
/// 添加绑定信息
/// </summary>
/// <param name="siteName">网站名</param>
/// <param name="ip">ip</param>
/// <param name="port">port</param>
/// <param name="domain">domain</param>
/// <param name="bindingProtocol">协议头如 http/https默认为http</param>
/// <returns>成功返回True,失败返回false</returns>
public static bool AddHostBinding(string siteName, string ip, string port, string domain, string bindingProtocol = "http")
{
try
{
using (ServerManager mgr = new ServerManager())
{
string binginfo = string.Format("{0}:{1}:{2}", ip, port, domain).ToLower();
BindingCollection binding = mgr.Sites[siteName].Bindings;
binding.Add(binginfo, bindingProtocol);
mgr.CommitChanges();
}
}
catch (Exception)
{
return false;
}
return true;
}
/// <summary>
/// 删除绑定信息
/// </summary>
/// <param name="siteName">网站名</param>
/// <param name="ip">ip</param>
/// <param name="port">port</param>
/// <param name="domain">domain</param>
/// <returns>成功返回True,失败返回false</returns>
public static bool DeleteHostBinding(string siteName, string ip, string port, string domain)
{
try
{
using (ServerManager mgr = new ServerManager())
{
string binginfo = string.Format("{0}:{1}:{2}", ip, port, domain).ToLower();
foreach (Binding item in mgr.Sites[siteName].Bindings)
{
if (item.BindingInformation == binginfo)
{
mgr.Sites[siteName].Bindings.Remove(item);
break;
}
}
mgr.CommitChanges();
}
}
catch (Exception)
{
return false;
}
return true;
}
#endregion
}
} 调取代码
using AutoIIS.Helper;
using Microsoft.Web.Administration;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace AutoIIS
{
public partial class Index : Form
{
public Index()
{
InitializeComponent();
} private void Index_Load(object sender, EventArgs e)
{ }
//添加默认页
private void button1_Click(object sender, EventArgs e)
{
richTextBox1.Text += IISHelper.AddDefaultDocument("苏飞论坛", txtdefault.Text.Trim());
} //创建网站
private void button2_Click(object sender, EventArgs e)
{
richTextBox1.Text += IISHelper.CreateSite(txtsite.Text.Trim(), txtdomain.Text.Trim(), txtfile.Text.Trim());
}
//删除默认文档
private void button3_Click(object sender, EventArgs e)
{
richTextBox1.Text += IISHelper.DeleteDefaultDocument("苏飞论坛", txtdefault.Text.Trim());
}
//删除网站
private void button4_Click(object sender, EventArgs e)
{
richTextBox1.Text += IISHelper.DeleteSite(txtsite.Text.Trim());
}
//删除
private void button6_Click(object sender, EventArgs e)
{
richTextBox1.Text += IISHelper.DeleteVDir(txtsite.Text.Trim(), txtxuniname.Text.Trim());
}
//添加
private void button5_Click(object sender, EventArgs e)
{
richTextBox1.Text += IISHelper.CreateVDir(txtsite.Text.Trim(), txtxuniname.Text.Trim(), txtxunipath.Text.Trim());
}
//启动
private void button7_Click(object sender, EventArgs e)
{
richTextBox1.Text += IISHelper.Start(txtsite.Text.Trim());
}
//暂停
private void button8_Click(object sender, EventArgs e)
{
richTextBox1.Text += IISHelper.Stop(txtsite.Text.Trim());
} private void button9_Click(object sender, EventArgs e)
{
Site site = IISHelper.GetSiteInfo(txtsite.Text.Trim());
richTextBox1.Text += "网站名:" + site.Name + "\r\n";
richTextBox1.Text += "网站状态:" + site.State.ToString() + "\r\n";
foreach (var item in site.Bindings)
{
richTextBox1.Text += "host:" + item.Host + "\r\n";
richTextBox1.Text += "bind:" + item.BindingInformation.ToString() + "\r\n";
} richTextBox1.Text += "网站状态:" + site.Applications.ToString().ToString() + "\r\n";
}
//添加
private void button10_Click(object sender, EventArgs e)
{
string[] strlist = txtdomain.Text.Trim().Split(':');
richTextBox1.Text += IISHelper.AddHostBinding(txtsite.Text.Trim(), strlist[0], strlist[1], strlist[2]);
}
//删除
private void button11_Click(object sender, EventArgs e)
{
string[] strlist = txtdomain.Text.Trim().Split(':');
richTextBox1.Text += IISHelper.DeleteHostBinding(txtsite.Text.Trim(), strlist[0], strlist[1], strlist[2]);
}
}
}

C# 操作IIS加强版(添加,删除,启动,暂停网站,默认页,绑定信息)的更多相关文章

  1. C#控制IIS动态添加删除网站

    我的目的是在Winform程序里面,可以直接启动一个HTTP服务端,给下游客户连接使用. 查找相关技术,有两种方法: 1.使用C#动态添加网站应用到IIS中,借用IIS的管理能力来提供HTTP接口.本 ...

  2. CentOS 7 添加win7启动项——修改默认启动项

    CentOS 7使用grub2引导启动,在win7之后装完CentOS再启动会丢失win7启动项. 首先,添加win7启动项,步骤如下: 1.使用root登陆系统 2.用文本编辑器打开 /boot/g ...

  3. JS添加删除一组文本框并对输入信息加以验证

    在做项目中遇到这样一个问题,就是我们需要添加几组数据到数据库,但是具体几组数据不确定,有客户来填写,比如我们需要添加打折策略,可能个策略有很多组方案,比如“满100打5折,满200打4折,满500打3 ...

  4. 点滴积累【JS】---JS小功能(操作Table--动态添加删除表格及数据)

    效果: 代码: <head runat="server"> <title></title> <style type="text/ ...

  5. 节点操作-创建并添加&删除节点&替换&克隆节点

    <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" ...

  6. ubuntu下添加/删除启动服务项

    在网上查了一下,命令如下 1.添加一个服务: $sudo update-rc.d ServiceName default 2.删除一个服务 $sudo update-rc.d ServiceName ...

  7. Quartz动态添加,修改,删除任务(暂停,任务状态,恢复,最近触发时间)

    首页 博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye GitChat 写博客 小程序 消息 登录注册 关闭 quartz_Cron表达式一分钟教程 09-05 ...

  8. dir(dict)|字典的创建-添加-删除-修改-判断存在-取值等相关操作

    dir(dict) ####字典操作:创建-添加-删除-修改-判断存在-取值 #(一)创建字典: {} .等号. zip(). [(),()] #1.创建空字典 dict0 = {} #2.等号创建 ...

  9. iis下设置默认页

    IIS设置设默认页 计算机-->右键管理-->服务器和应用程序-->Internet信息服务 -->网站-->你发布的网站名-->功能视图-->IIS大类里- ...

  10. ORACLE 11gR2 RAC添加删除(正常及强制)节点操作步骤(删除篇)

    ORACLE 11gR2 RAC添加删除(正常及强制)节点操作步骤(删除篇) 本文主要转载 [  http://www.cnxdug.org/?p=2511 ] 有部分细节自己实验添加,再此谢谢前辈. ...

随机推荐

  1. Nexus OSS 3 搭建并配置使用 Docker & Git LFS 仓库

    转载自:https://cloud.tencent.com/developer/article/1010590 1.Nexus OSS 3 介绍 我们知道 Nexus 是一个强大的 Maven 仓库管 ...

  2. 「产品运营」研发效能之DevOps平台如何运营?

    有人常说「酒香不怕巷子深」.不是的,如果这个巷子是酒吧街,那最深的那家酒吧肯定是租金最便宜的.酒吧的地段好坏已经在租金价格上体现出来了.现在已经不是那个工具缺乏.有个工具就拍手称快.欣然去试用的时代了 ...

  3. 离线安装chrome浏览器的postman插件

    最近开始研究webapi相关的东西,看到chrome浏览器的有个postman插件挺好用的,但是安装包下载下来以后会出现这种情况,这时候我们可以把crx后缀的改成zip格式的然后解压,然后选择开发者模 ...

  4. WhereIf 扩展

    public static class QueryableExtensions { public static IQueryable<T> WhereIf<T>(this IQ ...

  5. 【ps下载与安装】Adobe Photoshop 2022 for Mac v23.5 中文永久版下载 Ps图像编辑软件

    Adobe Photoshop 2022 mac破解版,是一款Ps图像编辑软件,同时支持M1/M2芯片和Intel芯片安装,此主要的更新包括多个新增和改进的功能,例如改进的对象选择工具,其悬停功能可预 ...

  6. C++之值传递&指针传递&引用传递详解

    C++之值传递&指针传递&引用传递详解 目录 C++之值传递&指针传递&引用传递详解 1.函数基础 2.值传递 3.指针传递 4.引用传递 1.函数基础 一个函数由以下 ...

  7. JDK中自带的JVM分析工具

    目录 一.业务背景 二.Jdk-Bin目录 三.命令行工具 1.jps命令 2.jinfo命令 3.jstat命令 4.jstack命令 5.jmap命令 四.可视化工具 1.jconsole 2.v ...

  8. day53-马踏棋盘

    马踏棋盘 1.算法优化的意义 算法是程序的灵魂,为什么有些程序可以在海量数据计算时,依旧保持高速计算? 编程中算法很多,比如八大排序算法(冒泡.选择.插入.快排.归并.希尔.基数.堆排序).查找算法. ...

  9. Istio(九):istio安全之授权

    目录 一.模块概览 二.系统环境 三.istio授权 3.1 istio授权 3.2 来源 3.3 操作 3.4 条件 四.实战:授权(访问控制) 4.1 访问控制 4.2 清理 一.模块概览 在Ku ...

  10. iptables和firewalld基础

    1.四表五链概念: filter表 过滤数据包 Nat表 用于网络地址转换(IP.端口) Mangle表 修改数据包的服务类型.TTL.并且可以配置路由实现QOS Raw表 决定数据包是否被状态跟踪机 ...