dream789 发表于 2015-8-12 11:53:29

C#操作IIS的代码

将C#操作IIS的代码贴出来,方便以后查阅.代码都是以前在网上搜集的,记不得出处了.


IISServerState
using System;
using System.DirectoryServices;
using System.Collections;

namespace OPS.Component
{
    /**//// <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
    }
}



IISWebServer
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

using System.DirectoryServices;

namespace OPS.Component
{
    /**//// <summary>
    /// IISWebServer
    /// </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"].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);
                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"].ToString() == ":" + this.Port + ":")
                  {
                        Server.Invoke("stop", new object);
                  }
                }
            }

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

      /**//**/
      /**//// <summary>
      ///
      /// </summary>
      public IISWebServer()
      {
            WebVirtualDirs = new IISWebVirtualDirCollection(this);
      }
    }
}


IISWebServerCollection
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

namespace OPS.Component
{
    /**//// <summary>
    /// IISWebServerCollection
    /// </summary>
    public class IISWebServerCollection : CollectionBase
    {
      /**//// <summary>
      ///
      /// </summary>
      public IISWebServer this
      {
            get
            {
                return (IISWebServer)this.List;

            }
      }

      /**//**/
      /**//// <summary>
      ///
      /// </summary>
      public IISWebServer this
      {
            get
            {
                ServerComment = ServerComment.ToLower().Trim();
                IISWebServer list;
                for (int i = 0; i < this.List.Count; i++)
                {
                  list = (IISWebServer)this.List;
                  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;
                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;
                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);
            }
      }

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



IISWebVirtualDir
using System;
using System.Collections.Generic;
using System.Text;

namespace OPS.Component
{
    /**//// <summary>
    /// IISWebVirtualDir
    /// </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()
      {

      }
    }
}


IISWebVirtualDirCollection
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

namespace OPS.Component
{
    /**//// <summary>
    /// IISWebVirtualDirCollection
    /// </summary>
    public class IISWebVirtualDirCollection : CollectionBase
    {
      /**//**/
      /**//// <summary>
      ///
      /// </summary>
      public IISWebServer Parent = null;

      /**//**/
      /**//// <summary>
      ///
      /// </summary>
      public IISWebVirtualDir this
      {
            get
            {
                return (IISWebVirtualDir)this.List;

            }
      }

      /**//**/
      /**//// <summary>
      ///
      /// </summary>
      public IISWebVirtualDir this
      {
            get
            {
                Name = Name.ToLower();
                IISWebVirtualDir list;
                for (int i = 0; i < this.List.Count; i++)
                {
                  list = (IISWebVirtualDir)this.List;
                  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);
            }
      }

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

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


IISManagement
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;

namespace OPS.Component
{
    /**//**/
    /**//// <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"];
                  item.AccessRead = (bool)Server.Properties["AccessRead"];
                  item.AccessScript = (bool)Server.Properties["AccessScript"];
                  item.DefaultDoc = (string)Server.Properties["DefaultDoc"];
                  item.EnableDefaultDoc = (bool)Server.Properties["EnableDefaultDoc"];
                  item.EnableDirBrowsing = (bool)Server.Properties["EnableDirBrowsing"];
                  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"].ToString();
                  }

                  item.Port = Convert.ToInt32(((string)Server.Properties["Serverbindings"]).Substring(1, ((string)Server.Properties["Serverbindings"]).Length - 2));
                  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"];
                        item_virdir.AccessScript = (bool)VirDir.Properties["AccessScript"];
                        item_virdir.DefaultDoc = (string)VirDir.Properties["DefaultDoc"];
                        item_virdir.EnableDefaultDoc = (bool)VirDir.Properties["EnableDefaultDoc"];
                        if (VirDir.SchemaClassName == "IIsWebVirtualDir")
                        {
                            item_virdir.Path = (string)VirDir.Properties["Path"];
                        }
                        else if (VirDir.SchemaClassName == "IIsWebDirectory")
                        {
                            item_virdir.Path = Root.Properties["Path"] + @"\" + 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"].ToString() == ":" + iisServer.Port + ":" )   
                  //                  {
                  //                        Server.Invoke("stop",new object);
                  //                  }
                }
            }

            i++;

            try
            {
                iisServer.index = i;
                Server = Service.Children.Add(i.ToString(), "IIsWebServer");
                Server.Properties["ServerComment"] = iisServer.ServerComment;
                Server.Properties["Serverbindings"].Add(":" + iisServer.Port + ":");
                Server.Properties["AccessScript"] = iisServer.AccessScript;
                Server.Properties["AccessRead"] = iisServer.AccessRead;
                Server.Properties["EnableDirBrowsing"] = iisServer.EnableDirBrowsing;
                Server.Properties["DefaultDoc"] = iisServer.DefaultDoc;
                Server.Properties["EnableDefaultDoc"] = iisServer.EnableDefaultDoc;

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


                Service.CommitChanges();
                Server.CommitChanges();
                root.CommitChanges();
                root.Invoke("AppCreate2", new object { 2 });
                //Server.Invoke("start",new object);
            }
            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"].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"].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"].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"].ToString() == ":" + iisServer.Port + ":")
                  {
                        Server.Invoke("stop", new object);
                  }
                }
            }

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

            try
            {

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

                DirectoryEntry root = getRoot(Server);

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

                Server.Invoke("start", new object);
            }
            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"]);
                }
            }

            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"] = iisVir.Path;
                vir.Properties["DefaultDoc"] = iisVir.DefaultDoc;
                vir.Properties["EnableDefaultDoc"] = iisVir.EnableDefaultDoc;
                vir.Properties["AccessScript"] = iisVir.AccessScript;
                vir.Properties["AccessRead"] = iisVir.AccessRead;
                vir.Invoke("AppCreate2", new object { 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("找不到给定的虚拟目录!"));
      }

    }
}
页: [1]
查看完整版本: C#操作IIS的代码