C#對(duì)IIS進(jìn)行操作的源碼

如下的資料是關(guān)于C#對(duì)IIS進(jìn)行操作的的代碼狂塘,希望能對(duì)各位有一些用處录煤。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Text.RegularExpressions;

using System.DirectoryServices;

using System.Security.Principal;

using System.Runtime.InteropServices;

using System.Data;

using System.Configuration;

using System.Web;

namespace IIS_BatchOperate

{

? ? public class IISHelper

? ? {

? ? ? ? #region 臨時(shí)模擬IIS管理員用戶

? ? ? ? public const int LOGON32_LOGON_INTERACTIVE = 2;

? ? ? ? public const int LOGON32_PROVIDER_DEFAULT = 0;

? ? ? ? static WindowsImpersonationContext impersonationContext;

? ? ? ? [DllImport("advapi32.dll")]

? ? ? ? public static extern int LogonUserA(String lpszUserName,

? ? ? ? ? ? String lpszDomain,

? ? ? ? ? ? String lpszPassword,

? ? ? ? ? ? int dwLogonType,

? ? ? ? ? ? int dwLogonProvider,

? ? ? ? ? ? ref IntPtr phToken);

? ? ? ? [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]

? ? ? ? public static extern int DuplicateToken(IntPtr hToken,

? ? ? ? ? ? int impersonationLevel,

? ? ? ? ? ? ref IntPtr hNewToken);

? ? ? ? [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]

? ? ? ? public static extern bool RevertToSelf();

? ? ? ? [DllImport("kernel32.dll", CharSet = CharSet.Auto)]

? ? ? ? public static extern bool CloseHandle(IntPtr handle);

? ? ? ? private static bool impersonateValidUser(String userName)

? ? ? ? {

? ? ? ? ? ? string domain = "administrator";

? ? ? ? ? ? string password = "123";

? ? ? ? ? ? WindowsIdentity tempWindowsIdentity;

? ? ? ? ? ? IntPtr token = IntPtr.Zero;

? ? ? ? ? ? IntPtr tokenDuplicate = IntPtr.Zero;

? ? ? ? ? ? if (RevertToSelf())

? ? ? ? ? ? {

? ? ? ? ? ? ? ? if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,

? ? ? ? ? ? ? ? ? ? LOGON32_PROVIDER_DEFAULT, ref token) != 0)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);

? ? ? ? ? ? ? ? ? ? ? ? impersonationContext = tempWindowsIdentity.Impersonate();

? ? ? ? ? ? ? ? ? ? ? ? if (impersonationContext != null)

? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? CloseHandle(token);

? ? ? ? ? ? ? ? ? ? ? ? ? ? CloseHandle(tokenDuplicate);

? ? ? ? ? ? ? ? ? ? ? ? ? ? return true;

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? if (token != IntPtr.Zero)

? ? ? ? ? ? ? ? CloseHandle(token);

? ? ? ? ? ? if (tokenDuplicate != IntPtr.Zero)

? ? ? ? ? ? ? ? CloseHandle(tokenDuplicate);

? ? ? ? ? ? return false;

? ? ? ? }

? ? ? ? private static void undoImpersonation()

? ? ? ? {

? ? ? ? ? ? impersonationContext.Undo();

? ? ? ? }

? ? ? ? #endregion

? ? ? ? private static int GetWebSiteID(string serverName, string siteName)

? ? ? ? {

? ? ? ? ? ? int siteID = -1;

? ? ? ? ? ? Regex regex = new Regex(siteName);

? ? ? ? ? ? if (serverName.Length < 1)

? ? ? ? ? ? ? ? serverName = "localhost";

? ? ? ? ? ? string tmpStr;

? ? ? ? ? ? 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)

? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? siteID = int.Parse(child.Name);

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? if (child.Properties["ServerComment"].Value != null)

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? tmpStr = child.Properties["ServerComment"].Value.ToString();

? ? ? ? ? ? ? ? ? ? ? ? if (regex.Match(tmpStr).Success)

? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? siteID = int.Parse(child.Name);

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? return siteID;

? ? ? ? }

? ? ? ? public static void AddHostHeader(string siteName, string ip, int port, string domain)

? ? ? ? {

? ? ? ? ? ? AddHostHeader("localhost", siteName, ip, port, domain);

? ? ? ? }

? ? ? ? public static void AddHostHeader(string serverName, string siteName, string ip, int port, string domain)

? ? ? ? {

? ? ? ? ? ? if (impersonateValidUser("dsiis"))

? ? ? ? ? ? {

? ? ? ? ? ? ? ? int siteID = GetWebSiteID(serverName, siteName);

? ? ? ? ? ? ? ? if (siteID < 1)

? ? ? ? ? ? ? ? ? ? siteID = 1;

? ? ? ? ? ? ? ? AddHostHeader(serverName, siteID, ip, port, domain);

? ? ? ? ? ? ? ? undoImpersonation();

? ? ? ? ? ? }

? ? ? ? ? ? else

? ? ? ? ? ? {

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? public static void AddHostHeader(string serverName, int siteid, string ip, int port, string domain)

? ? ? ? {

? ? ? ? ? ? PropertyValueCollection serverBindings = site.Properties["ServerBindings"];

? ? ? ? ? ? string headerStr = string.Format("{0}:{1}:{2}", ip, port, domain);

? ? ? ? ? ? if (!serverBindings.Contains(headerStr))

? ? ? ? ? ? {

? ? ? ? ? ? ? ? serverBindings.Add(headerStr);

? ? ? ? ? ? }

? ? ? ? ? ? site.CommitChanges();

? ? ? ? }

? ? ? ? public static void DeleteHostHeader(string siteName, string ip, int port, string domain)

? ? ? ? {

? ? ? ? ? ? DeleteHostHeader("localhost", siteName, ip, port, domain);

? ? ? ? }

? ? ? ? public static void DeleteHostHeader(string serverName, string siteName, string ip, int port, string domain)

? ? ? ? {

? ? ? ? ? ? if (impersonateValidUser("dsiis"))

? ? ? ? ? ? {

? ? ? ? ? ? ? ? int siteID = GetWebSiteID(serverName, siteName);

? ? ? ? ? ? ? ? if (siteID < 1)

? ? ? ? ? ? ? ? ? ? siteID = 1;

? ? ? ? ? ? ? ? DeleteHostHeader(serverName, siteID, ip, port, domain);

? ? ? ? ? ? ? ? undoImpersonation();

? ? ? ? ? ? }

? ? ? ? ? ? else

? ? ? ? ? ? {

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? public static void DeleteHostHeader(string serverName, int siteid, string ip, int port, string domain)

? ? ? ? {

? ? ? ? ? ? PropertyValueCollection serverBindings = site.Properties["ServerBindings"];

? ? ? ? ? ? string headerStr = string.Format("{0}:{1}:{2}", ip, port, domain);

? ? ? ? ? ? if (serverBindings.Contains(headerStr))

? ? ? ? ? ? {

? ? ? ? ? ? ? ? serverBindings.Remove(headerStr);

? ? ? ? ? ? }

? ? ? ? ? ? site.CommitChanges();

? ? ? ? }


? ? ? ? public static List<IISWebSite> LoadIISWebSiteData(string serverName)

? ? ? ? {

? ? ? ? ? ? List<IISWebSite> list = new List<IISWebSite>();

? ? ? ? ? ? int siteID;

? ? ? ? ? ? string siteName;

? ? ? ? ? ? DirectoryEntry ent = new DirectoryEntry(entPath);

? ? ? ? ? ? foreach (DirectoryEntry child in ent.Children)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? string HostName = ConfigurationManager.AppSettings["RencaiHost"].ToString();

? ? ? ? ? ? ? ? siteName = child.Properties["ServerComment"].Value.ToString();

? ? ? ? ? ? ? ? if (child.SchemaClassName == "IIsWebServer" && siteName == HostName)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? siteID = int.Parse(child.Name);

? ? ? ? ? ? ? ? ? ? list.Add(new IISWebSite(siteID, siteName));

? ? ? ? ? ? ? ? ? ? HttpCookie Cookie = new HttpCookie("IIsWebServerName");

? ? ? ? ? ? ? ? ? ? Cookie.Value =siteID.ToString();

? ? ? ? ? ? ? ? ? ? HttpContext.Current.Response.Cookies.Add(Cookie);

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? return list;


? ? ? ? }

? ? ? ? public static List<IISWebSiteHostHeader> LoadHostHeaderList(string serverName, int siteID)

? ? ? ? {

? ? ? ? ? ? List<IISWebSiteHostHeader> list = new List<IISWebSiteHostHeader>();

? ? ? ? ? ? PropertyValueCollection serverBindings = site.Properties["ServerBindings"];

? ? ? ? ? ? if (serverBindings != null && serverBindings.Value != null)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? foreach (string str in serverBindings)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? list.Add(new IISWebSiteHostHeader(siteID, str.Split(':')[0], int.Parse(str.Split(':')[1]), str.Split(':')[2]));

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? return list;

? ? ? ? }

? ? ? ? public static bool IsHostHeaderExists(string serverName, IISWebSiteHostHeader newHostHeader)

? ? ? ? {

? ? ? ? ? ? bool isFind = false;

? ? ? ? ? ? List<IISWebSite> siteList = LoadIISWebSiteData(serverName);

? ? ? ? ? ? foreach (IISWebSite site in siteList)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? List<IISWebSiteHostHeader> headerList = LoadHostHeaderList(serverName, site.SiteID);

? ? ? ? ? ? ? ? foreach (IISWebSiteHostHeader header in headerList)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? if (newHostHeader.Equals(header))

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? isFind = true;

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? return isFind;

? ? ? ? }

? ? ? ? public static List<IISWebSiteHostHeader> SearchHostHeaderList(string serverName, string hostHeader)

? ? ? ? {

? ? ? ? ? ? List<IISWebSiteHostHeader> list = new List<IISWebSiteHostHeader>();

? ? ? ? ? ? List<IISWebSite> siteList = LoadIISWebSiteData(serverName);

? ? ? ? ? ? foreach (IISWebSite site in siteList)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? List<IISWebSiteHostHeader> headerList = LoadHostHeaderList(serverName, site.SiteID);

? ? ? ? ? ? ? ? foreach (IISWebSiteHostHeader header in headerList)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? if (hostHeader.Equals(header.HostHeader, StringComparison.CurrentCultureIgnoreCase))

? ? ? ? ? ? ? ? ? ? ? ? list.Add(header);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? return list;

? ? ? ? }

? ? }

? ? public class IISWebSiteHostHeader

? ? {

? ? ? ? public int SiteID { get; set; }

? ? ? ? public string IP { get; set; }

? ? ? ? public int Port { get; set; }

? ? ? ? public string HostHeader { get; set; }

? ? ? ? public IISWebSiteHostHeader(int siteID, string ip, int port, string hostHeader)

? ? ? ? {

? ? ? ? ? ? this.SiteID = siteID;

? ? ? ? ? ? this.IP = ip;

? ? ? ? ? ? this.Port = port;

? ? ? ? ? ? this.HostHeader = hostHeader;

? ? ? ? }

? ? ? ? public override bool Equals(object obj)

? ? ? ? {

? ? ? ? ? ? IISWebSiteHostHeader header = obj as IISWebSiteHostHeader;

? ? ? ? ? ? if (header != null)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? if (header.IP == this.IP && header.Port == this.Port && header.HostHeader == this.HostHeader)

? ? ? ? ? ? ? ? ? ? return true;

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? ? ? return false;

? ? ? ? ? ? }

? ? ? ? ? ? return base.Equals(obj);

? ? ? ? }

? ? }

? ? public class IISWebSite

? ? {

? ? ? ? public int SiteID { get; set; }

? ? ? ? public string SiteName { get; set; }

? ? ? ? public IISWebSite(int siteID, string siteName)

? ? ? ? {

? ? ? ? ? ? this.SiteID = siteID;

? ? ? ? ? ? this.SiteName = siteName;

? ? ? ? }

? ? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市荞胡,隨后出現(xiàn)的幾起案子妈踊,更是在濱河造成了極大的恐慌,老刑警劉巖泪漂,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件廊营,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡萝勤,警方通過查閱死者的電腦和手機(jī)露筒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敌卓,“玉大人慎式,你說我怎么就攤上這事√司叮” “怎么了瘪吏?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蜗巧。 經(jīng)常有香客問我掌眠,道長(zhǎng),這世上最難降的妖魔是什么幕屹? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任蓝丙,我火速辦了婚禮,結(jié)果婚禮上望拖,老公的妹妹穿的比我還像新娘渺尘。我一直安慰自己,他們只是感情好靠娱,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掠兄,像睡著了一般像云。 火紅的嫁衣襯著肌膚如雪锌雀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天迅诬,我揣著相機(jī)與錄音腋逆,去河邊找鬼。 笑死侈贷,一個(gè)胖子當(dāng)著我的面吹牛惩歉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播俏蛮,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼撑蚌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了搏屑?” 一聲冷哼從身側(cè)響起争涌,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辣恋,沒想到半個(gè)月后亮垫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伟骨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年饮潦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片携狭。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡继蜡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出暑中,到底是詐尸還是另有隱情壹瘟,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布鳄逾,位于F島的核電站稻轨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏雕凹。R本人自食惡果不足惜殴俱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枚抵。 院中可真熱鬧线欲,春花似錦、人聲如沸汽摹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逼泣。三九已至趴泌,卻和暖如春舟舒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嗜憔。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工秃励, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吉捶。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓夺鲜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親呐舔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子币励,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • NAME dnsmasq - A lightweight DHCP and caching DNS server....
    ximitc閱讀 2,874評(píng)論 0 0
  • 1.在C/C++中實(shí)現(xiàn)本地方法 生成C/C++頭文件之后,你就需要寫頭文件對(duì)應(yīng)的本地方法滋早。注意:所有的本地方法的第...
    JayQiu閱讀 2,374評(píng)論 0 3
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程榄审,因...
    小菜c閱讀 6,449評(píng)論 0 17
  • 先創(chuàng)建服務(wù)端的APP 1.官網(wǎng)下載Winrun4j昔头。http://winrun4j.sourceforge.net...
    Alex_1799閱讀 1,738評(píng)論 1 2
  • 在做網(wǎng)站之前饼问, 一定要先給自己的網(wǎng)站定個(gè)位。如果是做大而全的網(wǎng)站揭斧,競(jìng)爭(zhēng)度相對(duì)而言就比較大莱革,如果別人比你做的好...
    李雨露plus閱讀 188評(píng)論 0 1