C#对IIS进行操作的源码

如下的资料是关于C#对IIS进行操作的的代码,希望能对各位有一些用处。

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 临时模拟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;

        }

    }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容