C# 操作IIS服务器Demo
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://blog.csdn.net/ts1030746080/article/details/8741399 錯誤
? ? /// </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# 操作IIS服务器Demo的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言开发刷机工具,移动叔叔专用mtk刷
- 下一篇: c# char unsigned_dll