.net 操作IIS

using System;
using System.DirectoryServices;
using System.Collections;
namespace WayControls.IIS
{
    /// <summary>
    /// IISWebServer的状态
    /// </summary>
    public enum IISServerState
    {
        /// <summary>
        ///
        /// </summary>
        Starting = 1,
        /// <summary>
        ///
        /// </summary>
        Started = 2,
        /// <summary>
        ///
        /// </summary>
        Stopping = 3,
        /// <summary>
        ///
        /// </summary>
        Stopped = 4,
        /// <summary>
        ///
        /// </summary>
        Pausing = 5,
        /// <summary>
        ///
        /// </summary>
        Paused = 6,
        /// <summary>
        ///
        /// </summary>
        Continuing = 7

    }
    /// <summary>
    /// IISManagement 的摘要说明。
    /// </summary>
    public class IISManagement
    {
        /// <summary>
        ///
        /// </summary>
        public IISWebServerCollection WebServers = new IISWebServerCollection();
        internal static string Machinename = "localhost";
        /// <summary>
        ///
        /// </summary>
        public IISManagement()
        {
            start();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="MachineName">机器名,默认值为localhost</param>
        public IISManagement(string MachineName)
        {
            if (MachineName.ToString() != "")
                Machinename = MachineName;
            start();
        }
        private void start()
        {
            DirectoryEntry Service = new DirectoryEntry("IIS://" + Machinename + "/W3SVC");
            DirectoryEntry Server;
            DirectoryEntry Root = null;
            DirectoryEntry VirDir;
            IEnumerator ie = Service.Children.GetEnumerator();
            IEnumerator ieRoot;
            IISWebServer item;
            IISWebVirtualDir item_virdir;
            bool finded = false;
            while (ie.MoveNext())
            {
                Server = (DirectoryEntry)ie.Current;
                if (Server.SchemaClassName == "IIsWebServer")
                {
                    item = new IISWebServer();
                    item.index = Convert.ToInt32(Server.Name);

                    item.ServerComment = (string)Server.Properties["ServerComment"][0];
                    item.AccessRead = (bool)Server.Properties["AccessRead"][0];
                    item.AccessScript = (bool)Server.Properties["AccessScript"][0];
                    item.DefaultDoc = (string)Server.Properties["DefaultDoc"][0];
                    item.EnableDefaultDoc = (bool)Server.Properties["EnableDefaultDoc"][0];
                    item.EnableDirBrowsing = (bool)Server.Properties["EnableDirBrowsing"][0];
                    ieRoot = Server.Children.GetEnumerator();

                    while (ieRoot.MoveNext())
                    {
                        Root = (DirectoryEntry)ieRoot.Current;
                        if (Root.SchemaClassName == "IIsWebVirtualDir")
                        {
                            finded = true;
                            break;
                        }
                    }
                    if (finded)
                    {
                        item.Path = Root.Properties["path"][0].ToString();
                    }
                  
                    //item.Port = Convert.ToInt32(((string)Server.Properties["Serverbindings"][0]).Substring(1, ((string)Server.Properties["Serverbindings"][0]).Length - 2));
                    item.Port = 10000;
                    this.WebServers.Add_(item);
                    ieRoot = Root.Children.GetEnumerator();
                    while (ieRoot.MoveNext())
                    {
                        VirDir = (DirectoryEntry)ieRoot.Current;
                        if (VirDir.SchemaClassName != "IIsWebVirtualDir" && VirDir.SchemaClassName != "IIsWebDirectory")
                            continue;
                        item_virdir = new IISWebVirtualDir(item.ServerComment);
                        item_virdir.Name = VirDir.Name;
                        item_virdir.AccessRead = (bool)VirDir.Properties["AccessRead"][0];
                        item_virdir.AccessScript = (bool)VirDir.Properties["AccessScript"][0];
                        item_virdir.DefaultDoc = (string)VirDir.Properties["DefaultDoc"][0];
                        item_virdir.EnableDefaultDoc = (bool)VirDir.Properties["EnableDefaultDoc"][0];
                        if (VirDir.SchemaClassName == "IIsWebVirtualDir")
                        {
                            item_virdir.Path = (string)VirDir.Properties["Path"][0];
                        }
                        else if (VirDir.SchemaClassName == "IIsWebDirectory")
                        {
                            item_virdir.Path = Root.Properties["Path"][0] + "//" + VirDir.Name;
                        }
                        item.WebVirtualDirs.Add_(item_virdir);
                    }
                }
            }
        }

        /// <summary>
        /// 创建站点
        /// </summary>
        /// <param name="iisServer"></param>
        public static void CreateIISWebServer(IISWebServer iisServer)
        {
            if (iisServer.ServerComment.ToString() == "")
                throw (new Exception("IISWebServer的ServerComment不能为空!"));
            DirectoryEntry Service = new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server;
            int i = 0;
            IEnumerator ie = Service.Children.GetEnumerator();

            while (ie.MoveNext())
            {
                Server = (DirectoryEntry)ie.Current;
                if (Server.SchemaClassName == "IIsWebServer")
                {
                    if (Convert.ToInt32(Server.Name) > i)
                        i = Convert.ToInt32(Server.Name);
                    //     if( Server.Properties["Serverbindings"][0].ToString() == ":" + iisServer.Port + ":" )
                    //     {
                    //      Server.Invoke("stop",new object[0]);
                    //     }
                }
            }
            i++;
            try
            {
                iisServer.index = i;
                Server = Service.Children.Add(i.ToString(), "IIsWebServer");
                Server.Properties["ServerComment"][0] = iisServer.ServerComment;
                Server.Properties["Serverbindings"].Add(":" + iisServer.Port + ":");
                Server.Properties["AccessScript"][0] = iisServer.AccessScript;
                Server.Properties["AccessRead"][0] = iisServer.AccessRead;
                Server.Properties["EnableDirBrowsing"][0] = iisServer.EnableDirBrowsing;
                Server.Properties["DefaultDoc"][0] = iisServer.DefaultDoc;
                Server.Properties["EnableDefaultDoc"][0] = iisServer.EnableDefaultDoc;

                DirectoryEntry root = Server.Children.Add("Root", "IIsWebVirtualDir");
                root.Properties["path"][0] = iisServer.Path;

                Service.CommitChanges();
                Server.CommitChanges();
                root.CommitChanges();
                root.Invoke("AppCreate2", new object[1] { 2 });
                //Server.Invoke("start",new object[0]);
            }
            catch (Exception es)
            {
                throw (es);
            }
        }
        /// <summary>
        /// 删除IISWebServer
        /// </summary>
        public static void RemoveIISWebServer(string ServerComment)
        {
            DirectoryEntry Service = new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server;
            IEnumerator ie = Service.Children.GetEnumerator();

            ServerComment = ServerComment.ToLower();
            while (ie.MoveNext())
            {
                Server = (DirectoryEntry)ie.Current;
                if (Server.SchemaClassName == "IIsWebServer")
                {
                    if (Server.Properties["ServerComment"][0].ToString().ToLower() == ServerComment)
                    {
                        Service.Children.Remove(Server);
                        Service.CommitChanges();
                        return;
                    }
                }
            }
        }

        /// <summary>
        /// 删除IISWebServer
        /// </summary>
        public static void RemoveIISWebServer(int index)
        {
            DirectoryEntry Service = new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            try
            {
                DirectoryEntry Server = new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC/" + index);
                if (Server != null)
                {
                    Service.Children.Remove(Server);
                    Service.CommitChanges();
                }
                else
                {
                    throw (new Exception("找不到此IISWebServer"));
                }
            }
            catch
            {
                throw (new Exception("找不到此IISWebServer"));
            }
        }

        /// <summary>
        /// 检查是否存在IISWebServer
        /// </summary>
        /// <param name="ServerComment">网站说明</param>
        /// <returns></returns>
        public static bool ExistsIISWebServer(string ServerComment)
        {
            ServerComment = ServerComment.Trim();
            DirectoryEntry Service = new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server = null;
            IEnumerator ie = Service.Children.GetEnumerator();

            string comment;
            while (ie.MoveNext())
            {
                Server = (DirectoryEntry)ie.Current;
                if (Server.SchemaClassName == "IIsWebServer")
                {
                    comment = Server.Properties["ServerComment"][0].ToString().ToLower().Trim();
                    if (comment == ServerComment.ToLower())
                    {
                        return true;
                    }
                }
            }

            return false;
        }
        /// <summary>
        /// 返回指定的IISWebServer
        /// </summary>
        /// <param name="ServerComment"></param>
        /// <returns></returns>
        internal static DirectoryEntry returnIISWebserver(string ServerComment)
        {
            ServerComment = ServerComment.Trim();
            DirectoryEntry Service = new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server = null;
            IEnumerator ie = Service.Children.GetEnumerator();

            string comment;
            while (ie.MoveNext())
            {
                Server = (DirectoryEntry)ie.Current;
                if (Server.SchemaClassName == "IIsWebServer")
                {
                    comment = Server.Properties["ServerComment"][0].ToString().ToLower().Trim();
                    if (comment == ServerComment.ToLower())
                    {
                        return Server;
                    }
                }
            }

            return null;
        }


        /// <summary>
        ///  返回指定的IISWebServer
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        internal static DirectoryEntry returnIISWebserver(int index)
        {
            DirectoryEntry Server = new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC/" + index);
            try
            {
                IEnumerator ie = Server.Children.GetEnumerator();
                return Server;
            }
            catch
            {
                return null;
            }
        }

        private static DirectoryEntry getRoot(DirectoryEntry Server)
        {
            foreach (DirectoryEntry child in Server.Children)
            {
                string name = child.Name.ToLower();
                if (name == "iiswebvirtualdir" || name == "root")
                {
                    return child;
                }
            }
            return null;
        }

        /// <summary>
        /// 修改与给定的IISWebServer具有相同网站说明的站点配置
        /// </summary>
        /// <param name="iisServer">给定的IISWebServer</param>
        public static void EditIISWebServer(IISWebServer iisServer)
        {
            if (iisServer.index == -1)
                throw (new Exception("找不到给定的站点!"));
            DirectoryEntry Service = new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server;

            IEnumerator ie = Service.Children.GetEnumerator();

            while (ie.MoveNext())
            {
                Server = (DirectoryEntry)ie.Current;
                if (Server.SchemaClassName == "IIsWebServer")
                {
                    if (Server.Properties["Serverbindings"][0].ToString() == ":" + iisServer.Port + ":")
                    {
                        Server.Invoke("stop", new object[0]);
                    }
                }
            }

            Server = returnIISWebserver(iisServer.index);
            if (Server == null)
            {
                throw (new Exception("找不到给定的站点!"));
            }

            try
            {

                Server.Properties["ServerComment"][0] = iisServer.ServerComment;
                Server.Properties["Serverbindings"][0] = ":" + iisServer.Port + ":";
                Server.Properties["AccessScript"][0] = iisServer.AccessScript;
                Server.Properties["AccessRead"][0] = iisServer.AccessRead;
                Server.Properties["EnableDirBrowsing"][0] = iisServer.EnableDirBrowsing;
                Server.Properties["DefaultDoc"][0] = iisServer.DefaultDoc;
                Server.Properties["EnableDefaultDoc"][0] = iisServer.EnableDefaultDoc;

                DirectoryEntry root = getRoot(Server);

                Server.CommitChanges();
                if (root != null)
                {
                    root.Properties["path"][0] = iisServer.Path;
                    root.CommitChanges();
                }

                Server.Invoke("start", new object[0]);
            }
            catch (Exception es)
            {
                throw (es);
            }
        }

        /// <summary>
        /// 返回所有站点的网站说明
        /// </summary>
        /// <returns></returns>
        public static ArrayList returnIISServerComment()
        {
            DirectoryEntry Service = new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server;

            ArrayList list = new ArrayList();
            IEnumerator ie = Service.Children.GetEnumerator();

            while (ie.MoveNext())
            {
                Server = (DirectoryEntry)ie.Current;
                if (Server.SchemaClassName == "IIsWebServer")
                {
                    list.Add(Server.Properties["ServerComment"][0]);
                }
            }

            return list;
        }

        /// <summary>
        /// 创建虚拟目录
        /// </summary>
        /// <param name="iisVir"></param>
        /// <param name="deleteIfExist"></param>
        public static void CreateIISWebVirtualDir(IISWebVirtualDir iisVir, bool deleteIfExist)
        {
            if (iisVir.Parent == null)
                throw (new Exception("IISWebVirtualDir没有所属的IISWebServer!"));

            DirectoryEntry Service = new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server = returnIISWebserver(iisVir.Parent.index);

            if (Server == null)
            {
                throw (new Exception("找不到给定的站点!"));
            }

            Server = getRoot(Server);
            if (deleteIfExist)
            {
                foreach (DirectoryEntry VirDir in Server.Children)
                {
                    if (VirDir.Name.ToLower().Trim() == iisVir.Name.ToLower())
                    {
                        Server.Children.Remove(VirDir);
                        Server.CommitChanges();
                        break;
                    }
                }
            }

            try
            {
                DirectoryEntry vir;
                vir = Server.Children.Add(iisVir.Name, "IIsWebVirtualDir");
                vir.Properties["Path"][0] = iisVir.Path;
                vir.Properties["DefaultDoc"][0] = iisVir.DefaultDoc;
                vir.Properties["EnableDefaultDoc"][0] = iisVir.EnableDefaultDoc;
                vir.Properties["AccessScript"][0] = iisVir.AccessScript;
                vir.Properties["AccessRead"][0] = iisVir.AccessRead;
                vir.Invoke("AppCreate2", new object[1] { 2 });

                Server.CommitChanges();
                vir.CommitChanges();

            }
            catch (Exception es)
            {
                throw (es);
            }
        }

        /// <summary>
        /// 删除虚拟目录
        /// </summary>
        /// <param name="WebServerComment">站点说明</param>
        /// <param name="VirtualDir">虚拟目录名称</param>
        public static void RemoveIISWebVirtualDir(string WebServerComment, string VirtualDir)
        {
            VirtualDir = VirtualDir.ToLower();
            DirectoryEntry Service = new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server = returnIISWebserver(WebServerComment);

            if (Server == null)
            {
                throw (new Exception("找不到给定的站点!"));
            }

            Server = getRoot(Server);
            foreach (DirectoryEntry VirDir in Server.Children)
            {
                if (VirDir.Name.ToLower().Trim() == VirtualDir)
                {
                    Server.Children.Remove(VirDir);
                    Server.CommitChanges();
                    return;
                }
            }

            throw (new Exception("找不到给定的虚拟目录!"));
        }
        /// <summary>
        /// 删除虚拟目录
        /// </summary>
        /// <param name="iisVir"></param>
        public static void RemoveIISWebVirtualDir(IISWebVirtualDir iisVir)
        {
            DirectoryEntry Service = new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server = returnIISWebserver(iisVir.Parent.index);

            if (Server == null)
            {
                throw (new Exception("找不到给定的站点!"));
            }

            Server = getRoot(Server);
            foreach (DirectoryEntry VirDir in Server.Children)
            {
                if (VirDir.Name.ToLower().Trim() == iisVir.Name.ToLower())
                {
                    Server.Children.Remove(VirDir);
                    Server.CommitChanges();
                    return;
                }
            }

            throw (new Exception("找不到给定的虚拟目录!"));
        }

    }
    /// <summary>
    ///
    /// </summary>
    public class IISWebServerCollection : CollectionBase
    {
        /// <summary>
        ///
        /// </summary>
        public IISWebServer this[int Index]
        {
            get
            {
                return (IISWebServer)this.List[Index];

            }
        }

        /// <summary>
        ///
        /// </summary>
        public IISWebServer this[string ServerComment]
        {
            get
            {
                ServerComment = ServerComment.ToLower().Trim();
                IISWebServer list;
                for (int i = 0; i < this.List.Count; i++)
                {
                    list = (IISWebServer)this.List[i];
                    if (list.ServerComment.ToLower().Trim() == ServerComment)
                        return list;
                }
                return null;
            }
        }

        internal void Add_(IISWebServer WebServer)
        {
            this.List.Add(WebServer);
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="WebServer"></param>
        public void Add(IISWebServer WebServer)
        {
            try
            {
                this.List.Add(WebServer);
                IISManagement.CreateIISWebServer(WebServer);
            }
            catch
            {
                throw (new Exception("发生意外错误,可能是某节点将该节点的上级节点作为它自己的子级插入"));
            }

        }

        /// <summary>
        /// 是否包含指定的网站
        /// </summary>
        /// <param name="ServerComment"></param>
        /// <returns></returns>
        public bool Contains(string ServerComment)
        {
            ServerComment = ServerComment.ToLower().Trim();
            for (int i = 0; i < this.List.Count; i++)
            {
                IISWebServer server = this[i];
                if (server.ServerComment.ToLower().Trim() == ServerComment)
                    return true;
            }
            return false;
        }

        /// <summary>
        /// 是否包含指定的网站
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        public bool Contains(int index)
        {
            for (int i = 0; i < this.List.Count; i++)
            {
                IISWebServer server = this[i];
                if (server.index == index)
                    return true;
            }
            return false;
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="WebServers"></param>
        public void AddRange(IISWebServer[] WebServers)
        {
            for (int i = 0; i <= WebServers.GetUpperBound(0); i++)
            {
                Add(WebServers[i]);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="WebServer"></param>
        public void Remove(IISWebServer WebServer)
        {
            for (int i = 0; i < this.List.Count; i++)
            {
                if ((IISWebServer)this.List[i] == WebServer)
                {
                    this.List.RemoveAt(i);
                    return;
                }
            }
            IISManagement.RemoveIISWebServer(WebServer.index);
        }
    }

    //
    /// <summary>
    ///
    /// </summary>
    public class IISWebServer
    {
        /// <summary>
        ///
        /// </summary>
        internal int index = -1;
        /// <summary>
        ///
        /// </summary>
        public IISWebVirtualDirCollection WebVirtualDirs;
        /// <summary>
        /// 网站说明
        /// </summary>
        public string ServerComment = "Way";
        /// <summary>
        /// 脚本支持
        /// </summary>
        public bool AccessScript = true;
        /// <summary>
        /// 读取
        /// </summary>
        public bool AccessRead = true;
        /// <summary>
        /// 物理路径
        /// </summary>
        public string Path = "c://";
        /// <summary>
        /// 端口
        /// </summary>
        public int Port = 80;
        /// <summary>
        /// 目录浏览
        /// </summary>
        public bool EnableDirBrowsing = false;
        /// <summary>
        /// 默认文档
        /// </summary>
        public string DefaultDoc = "index.aspx";
        /// <summary>
        /// 使用默认文档
        /// </summary>
        public bool EnableDefaultDoc = true;

        /// <summary>
        /// IISWebServer的状态
        /// </summary>
        public IISServerState ServerState
        {
            get
            {
                DirectoryEntry server = IISManagement.returnIISWebserver(this.index);
                if (server == null)
                    throw (new Exception("找不到此IISWebServer"));
                switch (server.Properties["ServerState"][0].ToString())
                {
                    case "2":
                        return IISServerState.Started;
                    case "4":
                        return IISServerState.Stopped;
                    case "6":
                        return IISServerState.Paused;
                }
                return IISServerState.Stopped;
            }
        }

        /// <summary>
        /// 停止IISWebServer
        /// </summary>
        public void Stop()
        {
            DirectoryEntry Server;
            if (index == -1)
                throw (new Exception("在IIS找不到此IISWebServer!"));
            try
            {
                Server = new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC/" + index);
                if (Server != null)
                    Server.Invoke("stop", new object[0]);
                else
                    throw (new Exception("在IIS找不到此IISWebServer!"));
            }
            catch
            {
                throw (new Exception("在IIS找不到此IISWebServer!"));
            }
        }

        /// <summary>
        /// 把基本信息的更改更新到IIS
        /// </summary>
        public void CommitChanges()
        {
            IISManagement.EditIISWebServer(this);
        }

        /// <summary>
        /// 启动IISWebServer
        /// </summary>
        public void Start()
        {
            if (index == -1)
                throw (new Exception("在IIS找不到此IISWebServer!"));

            DirectoryEntry Service = new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server;
            IEnumerator ie = Service.Children.GetEnumerator();

            while (ie.MoveNext())
            {
                Server = (DirectoryEntry)ie.Current;
                if (Server.SchemaClassName == "IIsWebServer")
                {
                    if (Server.Properties["Serverbindings"][0].ToString() == ":" + this.Port + ":")
                    {
                        Server.Invoke("stop", new object[0]);
                    }
                }
            }

            try
            {
                Server = new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC/" + index);
                if (Server != null)
                    Server.Invoke("start", new object[0]);
                else
                    throw (new Exception("在IIS找不到此IISWebServer!"));
            }
            catch
            {
                throw (new Exception("在IIS找不到此IISWebServer!"));
            }
        }

        /// <summary>
        ///
        /// </summary>
        public IISWebServer()
        {
            WebVirtualDirs = new IISWebVirtualDirCollection(this);
        }
        ///
    }
    /// <summary>
    ///
    /// </summary>
    public class IISWebVirtualDirCollection : CollectionBase
    {
        /// <summary>
        ///
        /// </summary>
        public IISWebServer Parent = null;

        /// <summary>
        ///
        /// </summary>
        public IISWebVirtualDir this[int Index]
        {
            get
            {
                return (IISWebVirtualDir)this.List[Index];

            }
        }

        /// <summary>
        ///
        /// </summary>
        public IISWebVirtualDir this[string Name]
        {
            get
            {
                Name = Name.ToLower();
                IISWebVirtualDir list;
                for (int i = 0; i < this.List.Count; i++)
                {
                    list = (IISWebVirtualDir)this.List[i];
                    if (list.Name.ToLower() == Name)
                        return list;
                }
                return null;
            }
        }
        internal void Add_(IISWebVirtualDir WebVirtualDir)
        {
            try
            {
                this.List.Add(WebVirtualDir);
            }
            catch
            {
                throw (new Exception("发生意外错误,可能是某节点将该节点的上级节点作为它自己的子级插入"));
            }

        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="WebVirtualDir"></param>
        public void Add(IISWebVirtualDir WebVirtualDir)
        {
            WebVirtualDir.Parent = this.Parent;
            try
            {
                this.List.Add(WebVirtualDir);

            }
            catch
            {
                throw (new Exception("发生意外错误,可能是某节点将该节点的上级节点作为它自己的子级插入"));
            }
            IISManagement.CreateIISWebVirtualDir(WebVirtualDir, true);

        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="WebVirtualDirs"></param>
        public void AddRange(IISWebVirtualDir[] WebVirtualDirs)
        {
            for (int i = 0; i <= WebVirtualDirs.GetUpperBound(0); i++)
            {
                Add(WebVirtualDirs[i]);
            }
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="WebVirtualDir"></param>
        public void Remove(IISWebVirtualDir WebVirtualDir)
        {
            for (int i = 0; i < this.List.Count; i++)
            {
                if ((IISWebVirtualDir)this.List[i] == WebVirtualDir)
                {
                    this.List.RemoveAt(i);
                    IISManagement.RemoveIISWebVirtualDir(WebVirtualDir);
                    return;
                }
            }
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="Parent"></param>
        public IISWebVirtualDirCollection(IISWebServer Parent)
        {
            this.Parent = Parent;
        }
    }


    ///
    /// <summary>
    ///
    /// </summary>
    public class IISWebVirtualDir
    {
        /// <summary>
        ///
        /// </summary>
        public IISWebServer Parent = null;
        /// <summary>
        /// 虚拟目录名称
        /// </summary>
        public string Name = "Way";
        /// <summary>
        /// 读取
        /// </summary>
        public bool AccessRead = true;
        /// <summary>
        /// 脚本支持
        /// </summary>
        public bool AccessScript = true;
        /// <summary>
        /// 物理路径
        /// </summary>
        public string Path = "c://";
        /// <summary>
        /// 默认文档
        /// </summary>
        public string DefaultDoc = "index.aspx";
        /// <summary>
        /// 使用默认文档
        /// </summary>
        public bool EnableDefaultDoc = true;
        /// <summary>
        /// 所属的网站的网站说明
        /// </summary>
        public string WebServer = "";

        /// <summary>
        ///
        /// </summary>
        /// <param name="WebServerName"></param>
        public IISWebVirtualDir(string WebServerName)
        {
            if (WebServerName.ToString() == "")
                throw (new Exception("WebServerName不能为空!"));
            this.WebServer = WebServerName;
        }
        /// <summary>
        ///
        /// </summary>
        public IISWebVirtualDir()
        {

        }
    }
}

/---------------------------------------------------------------------------

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <table>
            <tr><td colspan="2">創建IIS網站</td></tr>
            <tr><td> 網站名:</td><td><input type="text"  runat="server" name="name" id="name" /></td></tr>
            <tr><td> 目录:</td><td><input type="text"  runat="server" name="path" id="path" /></td></tr>
            <tr><td> 端口:</td><td><input type="text"  runat="server" name="port" id="port" /></td></tr>
            <tr><td colspan="2">创建虚拟目录</td></tr>
            <tr><td> 目录名称:</td><td><input type="text"  runat="server" name="vname" id="vname" /></td></tr>
            <tr><td> 目录地址:</td><td><input type="text"  runat="server" name="vpath" id="vpath" /></td></tr>
        </table>
         <asp:Button ID="Button2" runat="server" Text="創建"  OnClick="Create"/>
    </form>
</body>
</html>

 

Default.aspx.cs

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Administration;
using WayControls.IIS;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("当前IIS版本:" + Request.ServerVariables["Server_SoftWare"].ToString());

    }
    protected void Create(object sender, EventArgs e)
    {
        WayControls.IIS.IISManagement iisMan = new WayControls.IIS.IISManagement("localhost");
        WayControls.IIS.IISWebServer IISserver;
        IISserver = new WayControls.IIS.IISWebServer();
        IISserver.ServerComment = this.name.Value; //"我的站点";
        IISserver.Path = path.Value; //"d://Movie";
        IISserver.EnableDefaultDoc = true;
        IISserver.Port = Convert.ToInt32(port.Value);
        IISserver.DefaultDoc = "Index.aspx";
        iisMan.WebServers.Add(IISserver);

        //添加虚拟目录
        WayControls.IIS.IISWebVirtualDir virDir_ = new WayControls.IIS.IISWebVirtualDir();
        virDir_.Path = this.vpath.Value;//"d://Movie";
        virDir_.Name = vname.Value; //"新的虚拟目录名称";
        virDir_.DefaultDoc = "default.aspx";
        IISserver.WebVirtualDirs.Add(virDir_);
    }
}

 

 

 

 

以上方法已經測試過,一定可行,  iis6.0 iis7.5 iis8.0 上沒問題

 

 

注意:

1; 要在網站加入引用 system.DirectoryServices

2:此方法只有在把網站放在IIS上才可以創建成功,

3: 如果報“System.Runtime.InteropServices.COMException: 存取被拒” 那是應該沒權限 在web.config  <system.web>下加入 <identity impersonate="true" userName="(域名\)電腦用戶名" password="你電腦的密碼>

4:確保iis的應用程式集區 的.net framework的版本和網站的.net framework的版本相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值