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


     

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

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

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

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

      ///************** feidao@aspcn.com **************  

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

    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];  

             }  

         }  

    }

  • 相关阅读:
    javascript中this使用规律
    call和apply的作用和不同
    SVN的标准目录结构:trunk、branches、tags
    SVN 多人修改,如何管理 关于版本的问题
    公司考勤系统项目设计
    CDI Features
    Java Design Pattern
    公司考勤系统设计文件
    spring( history Design Philosophy )
    JSON/xml
  • 原文地址:https://www.cnblogs.com/asyuras/p/237389.html
Copyright © 2020-2023  润新知