.net(c#)操作IIS大全
来源:互联网 发布:淘宝无线开放平台 编辑:程序博客网 时间:2024/04/19 07:16
注意使用时要有服务器管理员权限 ,可在Web.config 添加
<system.web> <identity impersonate="true" userName="服务器用户名" password="密码" /></system.web>
IISWorker
using AppMain.model;using System;using System.Collections.Generic;using System.DirectoryServices;using System.Linq;using System.Net;using System.Net.NetworkInformation;using System.Text;using System.Text.RegularExpressions;using System.Threading.Tasks;namespace AppMain.bll{ public class IISWorker { #region 获取IIS版本 /// <summary> /// 获取本地IIS版本 /// </summary> /// <returns></returns> public static string GetIIsVersion() { try { DirectoryEntry entry = new DirectoryEntry("IIS://localhost/W3SVC/INFO"); string version = entry.Properties["MajorIISVersionNumber"].Value.ToString(); return version; } catch (Exception se) { //说明一点:IIS5.0中没有(int)entry.Properties["MajorIISVersionNumber"].Value;属性,将抛出异常 证明版本为 5.0 return string.Empty; } } #endregion #region 获取SiteID /// <summary> /// 获取最小SiteId,越小越好 /// </summary> /// <returns></returns> public static int SiteId() { DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC"); // Find unused ID value for new web site int siteID = 1; foreach (DirectoryEntry e in root.Children) { if (e.SchemaClassName == "IIsWebServer") { int ID = Convert.ToInt32(e.Name); if (ID >= siteID) { siteID = ID + 1; } } } return siteID; } #endregion #region 建IIS站点 /// <summary> /// IIS站点 /// </summary> /// <param name="webSiteName">站点名称</param> /// <param name="siteID">站点ID</param> /// <param name="port">站点端口</param> /// <param name="siteExplain">域名</param> /// <param name="defaultDoc">默认文档</param> /// <param name="pathToRoot">物理路径:d:\\iis\8001</param> /// <param name="UserId">应用程序池名称,如果没有自动创建</param> public static int CreateSite(string webSiteName,int siteID, string port, string siteExplain, string defaultDoc, string pathToRoot, string UserId) { int mark = 0; try { // createAppPool(siteExplain); DirectoryEntry de = new DirectoryEntry("IIS://localhost/" + "w3svc"); //从活动目录中获取IIS对象。 object[] prams = new object[2] { "IIsWebServer", siteID }; DirectoryEntry site = (DirectoryEntry)de.Invoke("Create", prams); //创建IISWebServer对象。 site.Properties["KeyType"][0] = "IIsWebServer"; site.Properties["ServerComment"][0] = webSiteName; //站点名称 site.Properties["ServerState"][0] = 2; //站点初始状态,1.停止,2.启动,3 site.Properties["ServerSize"][0] = 1; site.Properties["ServerBindings"].Add(":" + port + ":" + siteExplain); //站点端口 site.CommitChanges(); //保存改变 de.CommitChanges(); DirectoryEntry root = site.Children.Add("Root", "IIsWebVirtualDir"); //添加虚拟目录对象 root.Invoke("AppCreate", true); //创建IIS应用程序 root.Invoke("AppCreate3", new object[] { 2, UserId, true }); //创建应用程序池,并指定应用程序池为"HostPool","true"表示如果HostPool不存在,则自动创建 root.Properties["path"][0] = pathToRoot; //虚拟目录指向的物理目录 root.Properties["EnableDirBrowsing"][0] = true;//目录浏览 root.Properties["AuthAnonymous"][0] = true; root.Properties["AccessExecute"][0] = true; //可执行权限 root.Properties["AccessRead"][0] = true; root.Properties["AccessWrite"][0] = true; root.Properties["AccessScript"][0] = true;//纯脚本 root.Properties["AccessSource"][0] = false; root.Properties["FrontPageWeb"][0] = false; root.Properties["KeyType"][0] = "IIsWebVirtualDir"; root.Properties["AppFriendlyName"][0] = siteExplain; //应用程序名 root.Properties["AppIsolated"][0] = 2; root.Properties["DefaultDoc"][0] = defaultDoc; //默认文档 root.Properties["EnableDefaultDoc"][0] = true; //是否启用默认文档 root.CommitChanges(); site.CommitChanges(); root.Close(); site.Close(); de.CommitChanges(); //保存 site.Invoke("Start", null); //除了在创建过程中置初始状态外,也可在此调用方法改变状态 mark = 1; } catch(Exception ex) { mark = 0; } return mark; } #endregion #region 删除站点 public static void DelSite(string siteName) { string siteNum = GetWebSiteNum(siteName); string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", "localhost", siteNum); DirectoryEntry siteEntry = new DirectoryEntry(siteEntPath); string rootPath = String.Format("IIS://{0}/w3svc", "localhost"); DirectoryEntry rootEntry = new DirectoryEntry(rootPath); rootEntry.Children.Remove(siteEntry); rootEntry.CommitChanges(); } #endregion #region 域名绑定方法 public static int AddHostHeader(int siteid, string ip, int port, string domain)//增加主机头(站点编号.ip.端口.域名) { int mark = 0; try { DirectoryEntry site = new DirectoryEntry("IIS://localhost/W3SVC/" + siteid); PropertyValueCollection serverBindings = site.Properties["ServerBindings"]; string headerStr = string.Format("{0}:{1}:{2}", ip, port, domain); if (!serverBindings.Contains(headerStr)) { serverBindings.Add(headerStr); } site.CommitChanges(); mark = 1; } catch { mark = 0; } return mark; } #endregion #region 删除主机头 public static void DeleteHostHeader(int siteid, string ip, int port, string domain)//删除主机头(站点编号.ip.端口.域名) { DirectoryEntry site = new DirectoryEntry("IIS://localhost/W3SVC/" + siteid); PropertyValueCollection serverBindings = site.Properties["ServerBindings"]; string headerStr = string.Format("{0}:{1}:{2}", ip, port, domain); if (serverBindings.Contains(headerStr)) { serverBindings.Remove(headerStr); } site.CommitChanges(); } #endregion #region 创建应用程序池 static void createAppPool(string AppPoolName) { DirectoryEntry newpool; DirectoryEntry apppools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools"); newpool = apppools.Children.Add(AppPoolName, "IIsApplicationPool"); newpool.CommitChanges(); } #endregion #region 删除应用程序池 public void deleteAppPool(string AppPoolName) { bool ExistAppPoolFlag = false; try { DirectoryEntry apppools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools"); foreach (DirectoryEntry a in apppools.Children) { if (a.Name == AppPoolName) { ExistAppPoolFlag = true; a.DeleteTree(); // MessageBox.Show("应用程序池名称删除成功", "删除成功"); } } if (ExistAppPoolFlag == false) { // MessageBox.Show("应用程序池未找到", "删除失败"); } } catch { //MessageBox.Show(ex.Message, "错误"); } } #endregion #region 获取指定网站siteID /// <summary> /// 获取指定网站siteID /// </summary> /// <param name="siteName">站点名称</param> /// <returns></returns> public static string GetWebSiteNum(string siteName) { Regex regex = new Regex(siteName); string tmpStr; string entPath = String.Format("IIS://{0}/w3svc", "localhost"); DirectoryEntry ent = new DirectoryEntry(entPath); foreach (DirectoryEntry child in ent.Children) { if (child.SchemaClassName == "IIsWebServer") { if (child.Properties["ServerBindings"].Value != null) { tmpStr = child.Properties["ServerBindings"].Value.ToString(); if (regex.Match(tmpStr).Success) { return child.Name; } } if (child.Properties["ServerComment"].Value != null) { tmpStr = child.Properties["ServerComment"].Value.ToString(); if (regex.Match(tmpStr).Success) { return child.Name; } } } } return "没有找到要删除的站点"; } #endregion #region 获取IIS站点列表 /// <summary> /// 获取站点列表 /// </summary> public static List<IISInfo> GetServerBindings() { List<IISInfo> iisList = new List<IISInfo>(); string entPath = "IIS://localhost/w3svc"; DirectoryEntry ent = new DirectoryEntry(entPath); foreach (DirectoryEntry child in ent.Children) { if (child.SchemaClassName.Equals("IIsWebServer", StringComparison.OrdinalIgnoreCase)) { if (child.Properties["ServerBindings"].Value != null) { object objectArr = child.Properties["ServerBindings"].Value; string serverBindingStr = string.Empty; if (objectArr is Array)//如果有多个绑定站点时 { object[] objectToArr = (object[])objectArr; serverBindingStr = objectToArr[0].ToString(); } else//只有一个绑定站点 { serverBindingStr = child.Properties["ServerBindings"].Value.ToString(); } IISInfo iisInfo = new IISInfo(); iisInfo.DomainPort = serverBindingStr; iisInfo.AppPool = child.Properties["AppPoolId"].Value.ToString();//应用程序池 iisInfo.ServerComment = child.Properties["ServerComment"].Value.ToString(); iisInfo.physicalPath = GetWebsitePhysicalPath(child); iisList.Add(iisInfo); } } } return iisList; } #endregion #region 获取网站的物理路径 /// <summary> /// 得到网站的物理路径 /// </summary> /// <param name="rootEntry">网站节点</param> /// <returns></returns> public static string GetWebsitePhysicalPath(DirectoryEntry rootEntry) { string physicalPath = ""; foreach (DirectoryEntry childEntry in rootEntry.Children) { if ((childEntry.SchemaClassName == "IIsWebVirtualDir") && (childEntry.Name.ToLower() == "root")) { if (childEntry.Properties["Path"].Value != null) { physicalPath = childEntry.Properties["Path"].Value.ToString(); } else { physicalPath = ""; } } } return physicalPath; } #endregion #region 判断端口是否被占用 /// <summary> /// 判断端口是否被占用 /// </summary> /// <param name="port">端口号</param> /// <returns></returns> public static bool PortInUse(int port) { bool inUse = false; IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties(); IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners(); foreach (IPEndPoint endPoint in ipEndPoints) { if (endPoint.Port == port) { inUse = true; break; } } return inUse; } #endregion }}
IISInfo类
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AppMain.model{ public class IISInfo { /// <summary> /// 站点+端口 /// </summary> public string DomainPort { get; set; } /// <summary> /// 应用程序池 /// </summary> public string AppPool { get; set; } /// <summary> /// 网站名称 /// </summary> public string ServerComment { get; set; } /// <summary> /// 物理路径 /// </summary> public string physicalPath { get; set; } }}
1 0
- .net(c#)操作IIS大全
- .net 操作IIS
- 在Asp.net中操作IIS的虚拟目录(C#)
- .Net中如何操作IIS
- .Net中如何操作IIS
- .Net中如何操作IIS
- 用.NET操作IIS代码
- Net中如何操作IIS
- Net中如何操作IIS
- .Net中如何操作IIS
- .Net中如何操作IIS
- .Net中如何操作IIS
- .Net中如何操作IIS
- .Net中如何操作IIS
- .net操作IIS中的虚拟目录
- .Net中如何操作IIS
- .Net操作数据库大全
- Windows 2008-IIS 7.0-SSL操作大全
- Android之UID and PID
- 自定义SectionAdapter显示数据
- JQuery解析XML
- http://cssload.net/----动画
- Leetcode189: Peeking Iterator
- .net(c#)操作IIS大全
- 源码推荐(12.09):超强 AFN 封装,一行搞定自适应label&适配iPhone
- Struts2的运行流程及其工作原理
- Luajit反编译之探索记
- 一步一步学习TypeScript(07.Any类型)
- thinkphp 3.2 =》0623-8_执行查询sql
- 【code】animate综合动画
- 简单的计算器算法
- Apache Kafka-0.8.1.1源码编译