这篇文章主要介绍了C#操作IIS方法集合的相关资料,需要的朋友可以参考下
C# 操作IIS方法集合
如果在win8,win7情况下报错:未知错误(0x80005000) ---
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.DirectoryServices;
- using System.Linq;
- using System.Net;
- using System.Text;
- using System.Threading.Tasks;
- namespace IISControlHelper
- {
- /// <summary>
- /// IIS 操作方法集合
- /// http://www.vevb.com/article/72881.htm 错误
- /// </summary>
- public class IISWorker
- {
- private static string HostName = "localhost";
- /// <summary>
- /// 获取本地IIS版本
- /// </summary>
- /// <returns></returns>
- public static string GetIIsVersion()
- {
- try
- {
- DirectoryEntry entry = new DirectoryEntry("IIS://" + HostName + "/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;
- }
- }
- /// <summary>
- /// 创建虚拟目录网站
- /// </summary>
- /// <param name="webSiteName">网站名称</param>
- /// <param name="physicalPath">物理路径</param>
- /// <param name="domainPort">站点+端口,如192.168.1.23:90</param>
- /// <param name="isCreateAppPool">是否创建新的应用程序池</param>
- /// <returns></returns>
- public static int CreateWebSite(string webSiteName, string physicalPath, string domainPort,bool isCreateAppPool)
- {
- DirectoryEntry root = new DirectoryEntry("IIS://" + HostName + "/W3SVC");
- // 为新WEB站点查找一个未使用的ID
- 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; }
- }
- }
- // 创建WEB站点
- DirectoryEntry site = (DirectoryEntry)root.Invoke("Create", "IIsWebServer", siteID);
- site.Invoke("Put", "ServerComment", webSiteName);
- site.Invoke("Put", "KeyType", "IIsWebServer");
- site.Invoke("Put", "ServerBindings", domainPort + ":");
- site.Invoke("Put", "ServerState", 2);
- site.Invoke("Put", "FrontPageWeb", 1);
- site.Invoke("Put", "DefaultDoc", "Default.html");
- // site.Invoke("Put", "SecureBindings", ":443:");
- site.Invoke("Put", "ServerAutoStart", 1);
- site.Invoke("Put", "ServerSize", 1);
- site.Invoke("SetInfo");
- // 创建应用程序虚拟目录
- DirectoryEntry siteVDir = site.Children.Add("Root", "IISWebVirtualDir");
- siteVDir.Properties["AppIsolated"][0] = 2;
- siteVDir.Properties["Path"][0] = physicalPath;
- siteVDir.Properties["AccessFlags"][0] = 513;
- siteVDir.Properties["FrontPageWeb"][0] = 1;
- siteVDir.Properties["AppRoot"][0] = "LM/W3SVC/" + siteID + "/Root";
- siteVDir.Properties["AppFriendlyName"][0] = "Root";
- if (isCreateAppPool)
- {
- DirectoryEntry apppools = new DirectoryEntry("IIS://" + HostName + "/W3SVC/AppPools");
- DirectoryEntry newpool = apppools.Children.Add(webSiteName, "IIsApplicationPool");
- newpool.Properties["AppPoolIdentityType"][0] = "4"; //4
- newpool.Properties["ManagedPipelineMode"][0] = "0"; //0:集成模式 1:经典模式
- newpool.CommitChanges();
- siteVDir.Properties["AppPoolId"][0] = webSiteName;
- }
- siteVDir.CommitChanges();
- site.CommitChanges();
- return siteID;
- }
- /// <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;
- }
- /// <summary>
- /// 获取站点名
- /// </summary>
- public static List<IISInfo> GetServerBindings()
- {
- List<IISInfo> iisList = new List<IISInfo>();
- string entPath = String.Format("IIS://{0}/w3svc", HostName);
- 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 (IsArray(objectArr))//如果有多个绑定站点时
- {
- 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();//应用程序池
- iisList.Add(iisInfo);
- }
- }
- }
- return iisList;
- }
- public static bool CreateAppPool(string appPoolName, string Username, string Password)
- {
- bool issucess = false;
- try
- {
- //创建一个新程序池
- DirectoryEntry newpool;
- DirectoryEntry apppools = new DirectoryEntry("IIS://" + HostName + "/W3SVC/AppPools");
- newpool = apppools.Children.Add(appPoolName, "IIsApplicationPool");
- //设置属性 访问用户名和密码 一般采取默认方式
- newpool.Properties["WAMUserName"][0] = Username;
- newpool.Properties["WAMUserPass"][0] = Password;
- newpool.Properties["AppPoolIdentityType"][0] = "3";
- newpool.CommitChanges();
- issucess = true;
- return issucess;
- }
- catch // (Exception ex)
- {
- return false;
- }
- }
- /// <summary>
- /// 建立程序池后关联相应应用程序及虚拟目录
- /// </summary>
- public static void SetAppToPool(string appname,string poolName)
- {
- //获取目录
- DirectoryEntry getdir = new DirectoryEntry("IIS://localhost/W3SVC");
- foreach (DirectoryEntry getentity in getdir.Children)
- {
- if (getentity.SchemaClassName.Equals("IIsWebServer"))
- {
- //设置应用程序程序池 先获得应用程序 在设定应用程序程序池
- //第一次测试根目录
- foreach (DirectoryEntry getchild in getentity.Children)
- {
- if (getchild.SchemaClassName.Equals("IIsWebVirtualDir"))
- {
- //找到指定的虚拟目录.
- foreach (DirectoryEntry getsite in getchild.Children)
- {
- if (getsite.Name.Equals(appname))
- {
- //【测试成功通过】
- getsite.Properties["AppPoolId"].Value = poolName;
- getsite.CommitChanges();
- }
- }
- }
- }
- }
- }
- }
- /// <summary>
- /// 判断object对象是否为数组
- /// </summary>
- public static bool IsArray(object o)
- {
- return o is Array;
- }
- }
- }
希望本文所述对大家的C#程序设计有所帮助。
新闻热点
疑难解答