刀兄写的IIS管理类(C#)

类别:.NET开发 点击:0 评论:0 推荐:

///***********************************************************  

  ///************** IIS控制管理类 1.0 Beta **************  

  ///************** Author: 飞刀 **************  

  ///************** http://www.aspcn.com **************  

  ///************** [email protected] **************  

  ///***********************************************************  

using System;  

using System.Data;  

using System.DirectoryServices;  

using System.Collections;  

namespace Aspcn.Management  

{  

     /// <summary>  

     /// IISManager 的摘要说明。  

     /// </summary>  

     public class IISManager  

     {  

         //定义需要使用的  

          private string _server,_website;  

          private VirtualDirectories _virdirs;  

          protected System.DirectoryServices.DirectoryEntry rootfolder;  

          private bool _batchflag;  

         public IISManager()  

         {  

              //默认情况下使用localhost,即访问本地机  

              _server = "localhost";  

              _website = "1";  

              _batchflag = false;  

         }  

         public IISManager(string strServer)  

         {  

              _server = strServer;  

              _website = "1";  

              _batchflag = false;  

         }  

         /// <summary>  

         /// 定义公共属性  

         /// </summary>  

    

          //Server属性定义访问机器的名字,可以是IP与计算名  

         public string Server  

         {  

              get{ return _server;}  

              set{ _server = value;}  

         }  

          //WebSite属性定义,为一数字,为方便,使用string  

         //一般来说第一台主机为1,第二台主机为2,依次类推  

         public string WebSite  

         {  

              get{ return _website; }  

              set{ _website = value; }  

         }  

    

         //虚拟目录的名字  

         public VirtualDirectories VirDirs  

         {  

              get{ return _virdirs; }  

              set{ _virdirs = value;}  

         }  

          ///<summary>  

         ///定义公共方法  

          ///</summary>  

    

         //连接服务器  

         public void Connect()  

         {  

              ConnectToServer();  

         }  

         //为方便重载  

         public void Connect(string strServer)  

         {  

              _server = strServer;  

              ConnectToServer();  

         }  

         //为方便重载  

         public void Connect(string strServer,string strWebSite)  

         {  

              _server = strServer;  

              _website = strWebSite;  

              ConnectToServer();  

         }  

         //判断是否存这个虚拟目录  

         public bool Exists(string strVirdir)  

         {  

              return _virdirs.Contains(strVirdir);  

         }  

         //添加一个虚拟目录  

         public void Create(VirtualDirectory newdir)  

         {  

              string strPath = "IIS://" + _server + "/W3SVC/" + _website + "/ROOT/" + newdir.Name;  

              if(!_virdirs.Contains(newdir.Name) || _batchflag )  

              {  

                   try  

                   {  

                       //加入到ROOT的Children集合中去  

                        DirectoryEntry newVirDir = rootfolder.Children.Add(newdir.Name,"IIsWebVirtualDir");  

                        newVirDir.Invoke("AppCreate",true);  

                        newVirDir.CommitChanges();  

                        rootfolder.CommitChanges();  

                       //然后更新数据  

                        UpdateDirInfo(newVirDir,newdir);  

                   }  

                   catch(Exception ee)  

                   {  

                       throw new Exception(ee.ToString());  

                   }  

              }  

              else  

              {  

                   throw new Exception("This virtual directory is already exist.");  

              }  

         }  

         //得到一个虚拟目录  

         public VirtualDirectory GetVirDir(string strVirdir)  

         {  

              VirtualDirectory tmp = null;  

              if(_virdirs.Contains(strVirdir))  

              {  

                   tmp = _virdirs.Find(strVirdir);  

                   ((VirtualDirectory)_virdirs[strVirdir]).flag = 2;  

              }  

              else  

              {  

                   throw new Exception("This virtual directory is not exists");  

              }  

              return tmp;  

         }  

    

         //更新一个虚拟目录  

         public void Update(VirtualDirectory dir)  

         {  

              //判断需要更改的虚拟目录是否存在  

              if(_virdirs.Contains(dir.Name))  

              {  

                   DirectoryEntry ode = rootfolder.Children.Find(dir.Name,"IIsWebVirtualDir");  

                   UpdateDirInfo(ode,dir);  

              }  

              else  

              {  

                   throw new Exception("This virtual directory is not exists.");  

              }  

         }  

     

         //删除一个虚拟目录  

         public void Delete(string strVirdir)  

         {  

              if(_virdirs.Contains(strVirdir))  

              {  

                   object[] paras = new object[2];  

                   paras[0] = "IIsWebVirtualDir"; //表示操作的是虚拟目录  

                   paras[1] = strVirdir;  

                   rootfolder.Invoke("Delete",paras);  

                   rootfolder.CommitChanges();  

              }  

              else  

              {  

                   throw new Exception("Can''t delete " + strVirdir + ",because it isn''t exists.");  

              }  

         }  

         //批量更新  

         public void UpdateBatch()  

         {  

              BatchUpdate(_virdirs);  

         }  

         //重载一个:-)  

         public void UpdateBatch(VirtualDirectories vds)  

         {  

              BatchUpdate(vds);  

         }  

     

          ///<summary>  

         ///私有方法  

          ///</summary>  

    

         //连接服务器  

          private void ConnectToServer()  

         {  

              string strPath = "IIS://" + _server + "/W3SVC/" + _website +"/ROOT";  

              try  

              {  

                   this.rootfolder = new DirectoryEntry(strPath);  

                   _virdirs = GetVirDirs(this.rootfolder.Children);  

              }  

              catch(Exception e)  

              {  

                   throw new Exception("Can''t connect to the server ["+ _server +"] ...",e);  

              }  

         }  

         //执行批量更新  

          private void BatchUpdate(VirtualDirectories vds)  

         {  

              _batchflag = true;  

              foreach(object item in vds.Values)  

              {  

                   VirtualDirectory vd = (VirtualDirectory)item;  

                   switch(vd.flag)  

                   {  

                       case 0:  

                            break;  

                       case 1:  

                            Create(vd);  

                            break;  

                       case 2:  

                            Update(vd);  

                            break;  

                   }  

              }  

              _batchflag = false;  

         }  

         //更新东东  

          private void UpdateDirInfo(DirectoryEntry de,VirtualDirectory vd)  

         {  

              de.Properties["AnonymousUserName"][0] = vd.AnonymousUserName;  

              de.Properties["AnonymousUserPass"][0] = vd.AnonymousUserPass;  

              de.Properties["AccessRead"][0] = vd.AccessRead;  

              de.Properties["AccessExecute"][0] = vd.AccessExecute;  

              de.Properties["AccessWrite"][0] = vd.AccessWrite;  

              de.Properties["AuthBasic"][0] = vd.AuthBasic;  

              de.Properties["AuthNTLM"][0] = vd.AuthNTLM;  

              de.Properties["ContentIndexed"][0] = vd.ContentIndexed;  

              de.Properties["EnableDefaultDoc"][0] = vd.EnableDefaultDoc;  

              de.Properties["EnableDirBrowsing"][0] = vd.EnableDirBrowsing;  

              de.Properties["AccessSSL"][0] = vd.AccessSSL;  

              de.Properties["AccessScript"][0] = vd.AccessScript;  

              de.Properties["DefaultDoc"][0] = vd.DefaultDoc;  

              de.Properties["Path"][0] = vd.Path;  

              de.CommitChanges();  

         }  

    

         //获取虚拟目录集合  

          private VirtualDirectories GetVirDirs(DirectoryEntries des)  

         {  

              VirtualDirectories tmpdirs = new VirtualDirectories();  

              foreach(DirectoryEntry de in des)  

              {  

                   if(de.SchemaClassName == "IIsWebVirtualDir")  

                   {  

                        VirtualDirectory vd = new VirtualDirectory();  

                        vd.Name = de.Name;  

                        vd.AccessRead = (bool)de.Properties["AccessRead"][0];  

                        vd.AccessExecute = (bool)de.Properties["AccessExecute"][0];  

                        vd.AccessWrite = (bool)de.Properties["AccessWrite"][0];  

                        vd.AnonymousUserName = (string)de.Properties["AnonymousUserName"][0];  

                        vd.AnonymousUserPass = (string)de.Properties["AnonymousUserName"][0];  

                        vd.AuthBasic = (bool)de.Properties["AuthBasic"][0];  

                        vd.AuthNTLM = (bool)de.Properties["AuthNTLM"][0];  

                        vd.ContentIndexed = (bool)de.Properties["ContentIndexed"][0];  

                        vd.EnableDefaultDoc = (bool)de.Properties["EnableDefaultDoc"][0];  

                        vd.EnableDirBrowsing = (bool)de.Properties["EnableDirBrowsing"][0];  

                        vd.AccessSSL = (bool)de.Properties["AccessSSL"][0];  

                        vd.AccessScript = (bool)de.Properties["AccessScript"][0];  

                        vd.Path = (string)de.Properties["Path"][0];  

                        vd.flag = 0;  

                        vd.DefaultDoc = (string)de.Properties["DefaultDoc"][0];  

                        tmpdirs.Add(vd.Name,vd);  

                   }  

              }  

              return tmpdirs;  

         }  

    

     }  

     /// <summary>  

     /// VirtualDirectory类  

     /// </summary>  

     public class VirtualDirectory  

     {  

          private bool _read,_execute,_script,_ssl,_write,_authbasic,_authntlm,_indexed,_endirbrow,_endefaultdoc;  

          private string _ausername,_auserpass,_name,_path;  

          private int _flag;  

          private string _defaultdoc;  

         /// <summary>  

         /// 构造函数  

         /// </summary>  

         public VirtualDirectory()  

         {  

              SetValue();  

         }  

         public VirtualDirectory(string strVirDirName)  

         {  

              _name = strVirDirName;  

              SetValue();  

         }  

          private void SetValue()  

         {  

              _read = true;_execute = false;_script = false;_ssl= false;_write=false;_authbasic=false;_authntlm=false;  

              _indexed = false;_endirbrow=false;_endefaultdoc = false;  

              _flag = 1;  

              _defaultdoc = "default.htm,default.aspx,default.asp,index.htm";  

              _path = "C:\\";  

              _ausername = "";_auserpass ="";_name="";  

         }  

          ///<summary>  

         ///定义属性,IISVirtualDir太多属性了  

         ///我只搞了比较重要的一些,其它的大伙需要的自个加吧。  

          ///</summary>  

    

         public int flag  

         {  

              get{ return _flag;}  

              set{ _flag = value;}  

         }  

         public bool AccessRead  

         {  

              get{ return _read;}  

              set{ _read = value;}  

         }  

         public bool AccessWrite  

         {  

              get{ return _write;}  

              set{ _write = value;}  

         }  

         public bool AccessExecute  

         {  

              get{ return _execute;}  

               set{ _execute = value;}  

         }  

         public bool AccessSSL  

         {  

              get{ return _ssl;}  

              set{ _ssl = value;}  

         }  

         public bool AccessScript  

         {  

              get{ return _script;}  

              set{ _script = value;}  

         }  

         public bool AuthBasic  

         {  

              get{ return _authbasic;}  

              set{ _authbasic = value;}  

         }  

         public bool AuthNTLM  

         {  

              get{ return _authntlm;}  

              set{ _authntlm = value;}  

         }  

         public bool ContentIndexed  

         {  

              get{ return _indexed;}  

              set{ _indexed = value;}  

         }  

         public bool EnableDirBrowsing  

         {  

              get{ return _endirbrow;}  

              set{ _endirbrow = value;}  

         }  

         public bool EnableDefaultDoc  

         {  

              get{ return _endefaultdoc;}  

              set{ _endefaultdoc = value;}  

         }  

         public string Name  

         {  

              get{ return _name;}  

              set{ _name = value;}  

         }  

         public string Path  

         {  

              get{ return _path;}  

              set{ _path = value;}  

         }  

         public string DefaultDoc  

         {  

              get{ return _defaultdoc;}  

               set{ _defaultdoc = value;}  

         }  

         public string AnonymousUserName  

         {  

              get{ return _ausername;}  

              set{ _ausername = value;}  

         }  

         public string AnonymousUserPass  

         {  

              get{ return _auserpass;}  

              set{ _auserpass = value;}  

         }  

     }  

     /// <summary>  

     /// 集合VirtualDirectories  

     /// </summary>  

    

     public class VirtualDirectories : System.Collections.Hashtable  

     {  

         public VirtualDirectories()  

         {  

         }  

         //添加新的方法  

         public VirtualDirectory Find(string strName)  

         {  

              return (VirtualDirectory)this[strName];  

         }  

     }  

}

本文地址:http://com.8s8s.com/it/it43129.htm