实用的IIS管理类
来源:TAG:实用的浏览数: 日期:2010-7-21评论:
C#代码
  1.   using System;           
  2.   using System.Data;           
  3.   using System.DirectoryServices;           
  4.   using System.Collections;           
  5.   namespace ASPcn.Management           
  6.   {           
  7.   /// <summary>           
  8.   /// IISManager 的摘要说明。           
  9.   /// </summary>           
  10.   public class IISManager           
  11.   {           
  12.   //定义需要使用的           
  13.   private string _server,_website;           
  14.   private VirtualDirectories _virdirs;           
  15.   protected System.DirectoryServices.DirectoryEntry rootfolder;           
  16.   private bool _batchflag;           
  17.   public IISManager()           
  18.   {           
  19.   //默认情况下使用localhost,即访问本地机           
  20.   _server = "localhost";           
  21.   _website = "1";           
  22.   _batchflag = false;           
  23.   }           
  24.   public IISManager(string strServer)           
  25.   {           
  26.   _server = strServer;           
  27.   _website = "1";           
  28.   _batchflag = false;           
  29.   }           
  30.   /// <summary>           
  31.   /// 定义公共属性           
  32.   /// </summary>           
  33.   //Server属性定义访问机器的名字,可以是IP与计算名           
  34.   public string Server           
  35.   {           
  36.   getreturn _server;}           
  37.   set{ _server = value;}           
  38.   }           
  39.   //WebSite属性定义,为一数字,为方便,使用string           
  40.   //一般来说第一台主机为1,第二台主机为2,依次类推           
  41.   public string WebSite           
  42.   {           
  43.   getreturn _website; }           
  44.   set{ _website = value; }           
  45.   }           
  46.   //虚拟目录的名字           
  47.   public VirtualDirectories VirDirs           
  48.   {           
  49.   getreturn _virdirs; }           
  50.   set{ _virdirs = value;}           
  51.   }           
  52.   ///<summary>           
  53.   ///定义公共方法           
  54.   ///</summary>           
  55.   //连接服务器           
  56.   public void Connect()           
  57.   {           
  58.   ConnectToServer();           
  59.   }           
  60.   //为方便重载           
  61.   public void Connect(string strServer)           
  62.   {           
  63.   _server = strServer;           
  64.   ConnectToServer();           
  65.   }           
  66.   //为方便重载           
  67.   public void Connect(string strServer,string strWebSite)           
  68.   {           
  69.   _server = strServer;           
  70.   _website = strWebSite;           
  71.   ConnectToServer();           
  72.   }           
  73.   //判断是否存这个虚拟目录           
  74.   public bool Exists(string strVirdir)           
  75.   {           
  76.   return _virdirs.Contains(strVirdir);           
  77.   }           
  78.   //添加一个虚拟目录           
  79.   public void Create(VirtualDirectory newdir)           
  80.   {           
  81.   string strPath = "IIS://" + _server + "/W3SVC/" + _website + "/ROOT/" + newdir.Name;           
  82.   if(!_virdirs.Contains(newdir.Name) || _batchflag )           
  83.   {           
  84.   try          
  85.   {           
  86.   //加入到ROOT的Children集合中去           
  87.   DirectoryEntry newVirDir = rootfolder.Children.Add(newdir.Name,"IIsWebVirtualDir");           
  88.   newVirDir.Invoke("AppCreate",true);           
  89.   newVirDir.CommitChanges();           
  90.   rootfolder.CommitChanges();           
  91.   //然后更新数据           
  92.   UpdateDirInfo(newVirDir,newdir);           
  93.   }           
  94.   catch(Exception ee)           
  95.   {           
  96.   throw new Exception(ee.ToString());           
  97.   }           
  98.   }           
  99.   else          
  100.   {           
  101.   throw new Exception("This virtual directory is already exist.");           
  102.   }           
  103.   }           
  104.   //得到一个虚拟目录           
  105.   public VirtualDirectory GetVirDir(string strVirdir)           
  106.   {           
  107.   VirtualDirectory tmp = null;           
  108.   if(_virdirs.Contains(strVirdir))           
  109.   {           
  110.   tmp = _virdirs.Find(strVirdir);           
  111.   ((VirtualDirectory)_virdirs[strVirdir]).flag = 2;           
  112.   }           
  113.   else          
  114.   {           
  115.   throw new Exception("This virtual directory is not exists");           
  116.   }           
  117.   return tmp;           
  118.   }           
  119.   //更新一个虚拟目录           
  120.   public void Update(VirtualDirectory dir)           
  121.   {           
  122.   //判断需要更改的虚拟目录是否存在           
  123.   if(_virdirs.Contains(dir.Name))           
  124.   {           
  125.   DirectoryEntry ode = rootfolder.Children.Find(dir.Name,"IIsWebVirtualDir");           
  126.   UpdateDirInfo(ode,dir);           
  127.   }           
  128.   else          
  129.   {           
  130.   throw new Exception("This virtual directory is not exists.");           
  131.   }           
  132.   }           
  133.   //删除一个虚拟目录           
  134.   public void Delete(string strVirdir)           
  135.   {           
  136.   if(_virdirs.Contains(strVirdir))           
  137.   {           
  138.   object[] paras = new object[2];           
  139.   paras[0] = "IIsWebVirtualDir"//表示操作的是虚拟目录           
  140.   paras[1] = strVirdir;           
  141.   rootfolder.Invoke("Delete",paras);           
  142.   rootfolder.CommitChanges();           
  143.   }           
  144.   else          
  145.   {           
  146.   throw new Exception("Can''t delete " + strVirdir + ",because it isn''t exists.");           
  147.   }           
  148.   }           
  149.   //批量更新           
  150.   public void UpdateBatch()           
  151.   {           
  152.   BatchUpdate(_virdirs);           
  153.   }           
  154.   //重载一个:-)           
  155.   public void UpdateBatch(VirtualDirectories vds)           
  156.   {           
  157.   BatchUpdate(vds);           
  158.   }           
  159.   ///<summary>           
  160.   ///私有方法           
  161.   ///</summary>           
  162.   //连接服务器           
  163.   private void ConnectToServer()           
  164.   {           
  165.   string strPath = "IIS://" + _server + "/W3SVC/" + _website +"/ROOT";           
  166.   try          
  167.   {           
  168.   this.rootfolder = new DirectoryEntry(strPath);           
  169.   _virdirs = GetVirDirs(this.rootfolder.Children);           
  170.   }           
  171.   catch(Exception e)           
  172.   {           
  173.   throw new Exception("Can''t connect to the server ["+ _server +"] ...",e);           
  174.   }           
  175.   }           
  176.   //执行批量更新           
  177.   private void BatchUpdate(VirtualDirectories vds)           
  178.   {           
  179.   _batchflag = true;           
  180.   foreach(object item in vds.Values)           
  181.   {           
  182.   VirtualDirectory vd = (VirtualDirectory)item;           
  183.   switch(vd.flag)           
  184.   {           
  185.   case 0:           
  186.   break;           
  187.   case 1:           
  188.   Create(vd);           
  189.   break;           
  190.   case 2:           
  191.   Update(vd);           
  192.   break;           
  193.   }           
  194.   }           
  195.   _batchflag = false;           
  196.   }           
  197.   //更新东东           
  198.   private void UpdateDirInfo(DirectoryEntry de,VirtualDirectory vd)           
  199.   {           
  200.   de.Properties["AnonymousUserName"][0] = vd.AnonymousUserName;           
  201.   de.Properties["AnonymousUserPass"][0] = vd.AnonymousUserPass;           
  202.   de.Properties["AccessRead"][0] = vd.AccessRead;           
  203.   de.Properties["AccessExecute"][0] = vd.AccessExecute;           
  204.   de.Properties["AccessWrite"][0] = vd.AccessWrite;           
  205.   de.Properties["AuthBasic"][0] = vd.AuthBasic;           
  206.   de.Properties["AuthNTLM"][0] = vd.AuthNTLM;           
  207.   de.Properties["ContentIndexed"][0] = vd.ContentIndexed;           
  208.   de.Properties["EnableDefaultDoc"][0] = vd.EnableDefaultDoc;           
  209.   de.Properties["EnableDirBrowsing"][0] = vd.EnableDirBrowsing;           
  210.   de.Properties["AccessSSL"][0] = vd.AccessSSL;           
  211.   de.Properties["AccessScript"][0] = vd.AccessScript;           
  212.   de.Properties["DefaultDoc"][0] = vd.DefaultDoc;           
  213.   de.Properties["Path"][0] = vd.Path;           
  214.   de.CommitChanges();           
  215.   }           
  216.   //获取虚拟目录集合           
  217.   private VirtualDirectories GetVirDirs(DirectoryEntries des)           
  218.   {           
  219.   VirtualDirectories tmpdirs = new VirtualDirectories();           
  220.   foreach(DirectoryEntry de in des)           
  221.   {           
  222.   if(de.SchemaClassName == "IIsWebVirtualDir")           
  223.   {           
  224.   VirtualDirectory vd = new VirtualDirectory();           
  225.   vd.Name = de.Name;           
  226.   vd.AccessRead = (bool)de.Properties["AccessRead"][0];           
  227.   vd.AccessExecute = (bool)de.Properties["AccessExecute"][0];           
  228.   vd.AccessWrite = (bool)de.Properties["AccessWrite"][0];           
  229.   vd.AnonymousUserName = (string)de.Properties["AnonymousUserName"][0];           
  230.   vd.AnonymousUserPass = (string)de.Properties["AnonymousUserName"][0];           
  231.   vd.AuthBasic = (bool)de.Properties["AuthBasic"][0];           
  232.   vd.AuthNTLM = (bool)de.Properties["AuthNTLM"][0];           
  233.   vd.ContentIndexed = (bool)de.Properties["ContentIndexed"][0];           
  234.   vd.EnableDefaultDoc = (bool)de.Properties["EnableDefaultDoc"][0];           
  235.   vd.EnableDirBrowsing = (bool)de.Properties["EnableDirBrowsing"][0];           
  236.   vd.AccessSSL = (bool)de.Properties["AccessSSL"][0];           
  237.   vd.AccessScript = (bool)de.Properties["AccessScript"][0];           
  238.   vd.Path = (string)de.Properties["Path"][0];           
  239.   vd.flag = 0;           
  240.   vd.DefaultDoc = (string)de.Properties["DefaultDoc"][0];           
  241.   tmpdirs.Add(vd.Name,vd);           
  242.   }           
  243.   }           
  244.   return tmpdirs;           
  245.   }           
  246.   }           
  247.   /// <summary>           
  248.   /// VirtualDirectory类           
  249.   /// </summary>           
  250.   public class VirtualDirectory           
  251.   {           
  252.   private bool _read,_execute,_script,_ssl,_write,_authbasic,_authntlm,_indexed,_endirbrow,_endefaultdoc;           
  253.   private string _ausername,_auserpass,_name,_path;           
  254.   private int _flag;           
  255.   private string _defaultdoc;           
  256.   /// <summary>           
  257.   /// 构造函数           
  258.   /// </summary>           
  259.   public VirtualDirectory()           
  260.   {           
  261.   SetValue();           
  262.   }           
  263.   public VirtualDirectory(string strVirDirName)           
  264.   {           
  265.   _name = strVirDirName;           
  266.   SetValue();           
  267.   }           
  268.   private void SetValue()           
  269.   {           
  270.   _read = true;_execute = false;_script = false;_ssl= false;_write=false;_authbasic=false;_authntlm=false;           
  271.   _indexed = false;_endirbrow=false;_endefaultdoc = false;           
  272.   _flag = 1;           
  273.   _defaultdoc = "default.htm,default.ASPx,default.asp,index.htm";           
  274.   _path = "C:\\";          
  275.   _ausername = "";_auserpass ="";_name="";           
  276.   }           
  277.   ///<summary>           
  278.   ///定义属性,IISVirtualDir太多属性了           
  279.   ///我只搞了比较重要的一些,其它的大伙需要的自个加吧。           
  280.   ///</summary>           
  281.   public int flag           
  282.   {           
  283.   getreturn _flag;}           
  284.   set{ _flag = value;}           
  285.   }           
  286.   public bool AccessRead           
  287.   {           
  288.   getreturn _read;}           
  289.   set{ _read = value;}           
  290.   }           
  291.   public bool AccessWrite           
  292.   {           
  293.   getreturn _write;}           
  294.   set{ _write = value;}           
  295.   }           
  296.   public bool AccessExecute           
  297.   {           
  298.   getreturn _execute;}           
  299.   set{ _execute = value;}           
  300.   }           
  301.   public bool AccessSSL           
  302.   {           
  303.   getreturn _ssl;}           
  304.   set{ _ssl = value;}           
  305.   }           
  306.   public bool AccessScript           
  307.   {           
  308.   getreturn _script;}           
  309.   set{ _script = value;}           
  310.   }           
  311.   public bool AuthBasic           
  312.   {           
  313.   getreturn _authbasic;}           
  314.   set{ _authbasic = value;}           
  315.   }           
  316.   public bool AuthNTLM           
  317.   {           
  318.   getreturn _authntlm;}           
  319.   set{ _authntlm = value;}           
  320.   }           
  321.   public bool ContentIndexed           
  322.   {           
  323.   getreturn _indexed;}           
  324.   set{ _indexed = value;}           
  325.   }           
  326.   public bool EnableDirBrowsing           
  327.   {           
  328.   getreturn _endirbrow;}           
  329.   set{ _endirbrow = value;}           
  330.   }           
  331.   public bool EnableDefaultDoc           
  332.   {           
  333.   getreturn _endefaultdoc;}           
  334.   set{ _endefaultdoc = value;}           
  335.   }           
  336.   public string Name           
  337.   {           
  338.   getreturn _name;}           
  339.   set{ _name = value;}           
  340.   }           
  341.   public string Path           
  342.   {           
  343.   getreturn _path;}           
  344.   set{ _path = value;}           
  345.   }           
  346.   public string DefaultDoc           
  347.   {           
  348.   getreturn _defaultdoc;}           
  349.   set{ _defaultdoc = value;}           
  350.   }           
  351.   public string AnonymousUserName           
  352.   {           
  353.   getreturn _ausername;}           
  354.   set{ _ausername = value;}           
  355.   }           
  356.   public string AnonymousUserPass           
  357.   {           
  358.   getreturn _auserpass;}           
  359.   set{ _auserpass = value;}           
  360.   }           
  361.   }           
  362.   /// <summary>           
  363.   /// 集合VirtualDirectories           
  364.   /// </summary>           
  365.   public class VirtualDirectories : System.Collections.Hashtable           
  366.   {           
  367.   public VirtualDirectories()           
  368.   {           
  369.   }           
  370.   //添加新的方法           
  371.   public VirtualDirectory Find(string strName)           
  372.   {           
  373.   return (VirtualDirectory)this[strName];           
  374.   }           
  375.   }           
  376.   }          
昨天新闻点击排行
一周新闻点击排行
当月新闻点击排行
新闻链接
上一篇文章:C#实现汉字简繁转换
相关评论
正在加载评论列表...
评论表单加载中...