zoukankan      html  css  js  c++  java
  • IIS操作类

    添加引用 Microsoft.Web.Administration

      1 using System;
      2 using System.Data;
      3 using System.DirectoryServices;
      4 using System.Collections;
      5 
      6 namespace IISManage
      7 {
      8     /// <summary>
      9     /// IIS管理类,可以实现创建站点、虚拟目录,删除虚拟目录等
     10     /// </summary>
     11     public class IISManager
     12     {
     13         private string _server, _website, _AnonymousUserPass, _AnonymousUserName;
     14         private VirtualDirectories _virdirs;
     15         protected System.DirectoryServices.DirectoryEntry rootfolder;
     16         private bool _batchflag;
     17 
     18         #region 构造函数
     19         /// <summary>
     20         /// 构造函数
     21         /// </summary>
     22         public IISManager()
     23         {
     24             //默认情况下使用localhost,即访问本地机
     25             _server = "localhost";
     26             _website = "1";
     27             _batchflag = false;
     28         }
     29 
     30         /// <summary>
     31         /// 构造函数
     32         /// </summary>
     33         /// <param name="strServer">服务器</param>
     34         public IISManager(string strServer)
     35         {
     36             _server = strServer;
     37             _website = "1";
     38             _batchflag = false;
     39         }
     40 
     41         /// <summary>
     42         /// 构造函数
     43         /// </summary>
     44         /// <param name="strServer">服务器</param>
     45         /// <param name="website">站点,每一个站点为1,第二个站点为2,依此类推</param>
     46         public IISManager(string strServer, int website)
     47         {
     48             _server = strServer;
     49             _website = website.ToString();
     50             _batchflag = false;
     51         }
     52         #endregion
     53 
     54         #region 定义公共属性
     55 
     56         /// <summary>
     57         /// 匿名访问用户
     58         /// </summary>
     59         public string AnonymousUserName
     60         {
     61             get { return _AnonymousUserName; }
     62             set { _AnonymousUserName = value; }
     63         }
     64 
     65         /// <summary>
     66         /// 匿名访问用户密码
     67         /// </summary>
     68         public string AnonymousUserPass
     69         {
     70             get { return _AnonymousUserPass; }
     71             set { _AnonymousUserPass = value; }
     72         }
     73 
     74         /// <summary>
     75         /// 服务器,可以是IP或计算名
     76         /// </summary>
     77         public string Server
     78         {
     79             get { return _server; }
     80             set { _server = value; }
     81         }
     82 
     83         /// <summary>
     84         /// 站点,一般来说第一台主机为1,第二台主机为2,依次类推
     85         /// </summary>
     86         public int WebSite
     87         {
     88             get { return Convert.ToInt32(_website); }
     89             set { _website = Convert.ToString(value); }
     90         }
     91 
     92         /// <summary>
     93         /// 虚拟目录的名字
     94         /// </summary>
     95         public VirtualDirectories VirDirs
     96         {
     97             get { return _virdirs; }
     98             set { _virdirs = value; }
     99         }
    100         #endregion
    101 
    102         #region 定义公共方法
    103         /// <summary>
    104         /// 获取匿名访问用户的用户名和密码
    105         /// </summary>
    106         public void get_AnonymousUser()
    107         {
    108             _AnonymousUserPass = "IUSR_DEVE-SERVER";
    109             _AnonymousUserName = "IUSR_DEVE-SERVER";
    110             VirtualDirectory vDir;
    111             try
    112             {
    113                 Hashtable myList = (Hashtable)_virdirs;
    114                 IDictionaryEnumerator myEnumerator = myList.GetEnumerator();
    115                 while (myEnumerator.MoveNext())
    116                 {
    117                     vDir = (VirtualDirectory)myEnumerator.Value;
    118                     if (vDir.AnonymousUserName != "" && vDir.AnonymousUserPass != "")
    119                     {
    120                         _AnonymousUserName = vDir.AnonymousUserName;
    121                         _AnonymousUserPass = vDir.AnonymousUserPass;
    122                         break;
    123                     }
    124                 }
    125             }
    126             catch
    127             {
    128                 _AnonymousUserPass = "IUSR_DEVE-SERVER";
    129                 _AnonymousUserName = "IUSR_DEVE-SERVER";
    130             }
    131         }
    132 
    133         /// <summary>
    134         /// 连接服务器
    135         /// </summary>
    136         public void Connect()
    137         {
    138             ConnectToServer();
    139         }
    140 
    141         /// <summary>
    142         /// 连接服务器
    143         /// </summary>
    144         /// <param name="strServer">服务器名称</param>
    145         public void Connect(string strServer)
    146         {
    147             _server = strServer;
    148             ConnectToServer();
    149         }
    150         /// <summary>
    151         /// 连接服务器
    152         /// </summary>
    153         /// <param name="strServer">服务器名称</param>
    154         /// <param name="strWebSite">站点,一般来说第一台主机为1,第二台主机为2,依次类推</param>
    155         public void Connect(string strServer, string strWebSite)
    156         {
    157             _server = strServer;
    158             _website = strWebSite;
    159             ConnectToServer();
    160         }
    161 
    162         /// <summary>
    163         /// 添加一个站点
    164         /// </summary>
    165         /// <param name="path">站点的路径</param>
    166         public void CreateWebSite(string webSiteName, string port, string path)
    167  {
    168  try
    169  {
    170  DirectoryEntry root = new DirectoryEntry("IIS://" this._server "/W3SVC");
    171  int siteID = 1;
    172  foreach(DirectoryEntry e in root.Children)
    173  {
    174  if(e.SchemaClassName == "IIsWebServer")
    175  {
    176  int ID = Convert.ToInt32(e.Name);
    177  if(ID >= siteID){siteID = ID 1;}
    178  if(e.Properties["ServerBindings"][0].ToString() == ":" port ":")
    179  {
    180  throw new Exception(port "已被占用,请选择其它端口!");
    181  }
    182  }
    183  }
    184 DirectoryEntry site = (DirectoryEntry)root.Invoke("Create", "IIsWebServer", siteID);
    185  site.Invoke("Put", "ServerComment", webSiteName);
    186  site.Invoke("Put", "KeyType", "IIsWebServer");
    187  site.Invoke("Put", "ServerBindings", ":" port ":");
    188  site.Invoke("Put", "ServerState", 2);
    189  site.Invoke("Put", "FrontPageWeb", 1);
    190  site.Invoke("Put", "DefaultDoc", "index.aspx");
    191  site.Invoke("Put", "SecureBindings", ":443:");
    192  site.Invoke("Put", "ServerAutoStart", 1);
    193  site.Invoke("Put", "ServerSize", 1);
    194  site.Invoke("SetInfo");
    195  DirectoryEntry siteVDir = site.Children.Add("Root", "IISWebVirtualDir");
    196  siteVDir.Properties["AppIsolated"][0] = 2;
    197  siteVDir.Properties["Path"][0] = path;
    198  siteVDir.Properties["AccessFlags"][0] = 513;
    199  siteVDir.Properties["FrontPageWeb"][0] = 1;
    200  //siteVDir.Properties["AppRoot"][0] = "LM/W3SVC/" siteID "/Root";
    201  siteVDir.Properties["AppFriendlyName"][0] = "ROOT";
    202  siteVDir.CommitChanges();
    203  site.CommitChanges();
    204  }
    205  catch(Exception ex)
    206  {
    207  throw ex;
    208  }
    209  }
    210 
    211         /// <summary>
    212         /// 取得所有站点
    213         /// </summary>
    214         /// <returns></returns>
    215         public System.Collections.Hashtable getSites()
    216  {
    217  try
    218  {
    219  DirectoryEntry root = new DirectoryEntry("IIS://" this._server "/W3SVC");
    220  Hashtable sites = new Hashtable();
    221  foreach(DirectoryEntry e in root.Children)
    222  {
    223  if(e.SchemaClassName == "IIsWebServer")
    224  {
    225  sites.Add(e.Name,e);
    226  }
    227  }
    228  return sites;
    229  }
    230  catch(Exception ex)
    231  {
    232  throw ex;
    233  }
    234  }
    235 
    236         /// <summary>
    237         /// 判断是否存这个虚拟目录
    238         /// </summary>
    239         /// <param name="strVirdir">虚拟目录名称</param>
    240         /// <returns></returns>
    241         public bool Exists(string strVirdir)
    242         {
    243             return _virdirs.Contains(strVirdir);
    244         }
    245 
    246         /// <summary>
    247         /// 添加一个虚拟目录
    248         /// </summary>
    249         /// <param name="newdir">虚拟目录</param>
    250         /// <returns></returns>
    251         public bool CreateVirtualDirectory(VirtualDirectory newdir) 
    252 {
    253  string strPath = "IIS://" _server "/W3SVC/" _website "/ROOT/" newdir.Name;
    254  if(!_virdirs.Contains(newdir.Name) || _batchflag )
    255  {
    256  try
    257  {
    258  //加入到ROOT的Children集合中去
    259 DirectoryEntry newVirDir = rootfolder.Children.Add(newdir.Name,"IIsWebVirtualDir");
    260  newVirDir.Invoke("AppCreate",true);
    261  newVirDir.CommitChanges();
    262  rootfolder.CommitChanges();
    263  //然后更新数据
    264 UpdateDirInfo(newVirDir,newdir);
    265  return true;
    266  }
    267  catch(Exception)
    268  {
    269  return false;
    270  }
    271  }
    272  else
    273  {
    274  return false;
    275  }
    276  }
    277 
    278         /// <summary>
    279         /// 得到一个虚拟目录
    280         /// </summary>
    281         /// <param name="strVirdir">虚拟目录名</param>
    282         /// <returns></returns>
    283         public VirtualDirectory GetVirDir(string strVirdir)
    284  {
    285  VirtualDirectory tmp = null;
    286  if(_virdirs.Contains(strVirdir))
    287  {
    288  tmp = _virdirs.Find(strVirdir);
    289  ((VirtualDirectory)_virdirs[strVirdir]).flag = 2;
    290  }
    291  else
    292  {
    293  throw new Exception("虚拟目录" strVirdir "不存在!");
    294  }
    295 return tmp;
    296  }
    297 
    298         /// <summary>
    299         /// 更新一个虚拟目录
    300         /// </summary>
    301         /// <param name="dir">虚拟目录</param>
    302         public void Update(VirtualDirectory dir)
    303  {
    304  //判断需要更改的虚拟目录是否存在
    305 if(_virdirs.Contains(dir.Name))
    306  {
    307  DirectoryEntry ode = rootfolder.Children.Find(dir.Name,"IIsWebVirtualDir");
    308  UpdateDirInfo(ode,dir);
    309  }
    310  else
    311  {
    312  System.Windows.Forms.MessageBox.Show("虚拟目录" dir.Name "不存在!");
    313  }
    314  }
    315 
    316         /// <summary>
    317         /// 删除一个虚拟目录
    318         /// </summary>
    319         /// <param name="strVirdir">虚拟目录名</param>
    320         public void Delete(string strVirdir)
    321  {
    322  if(_virdirs.Contains(strVirdir))
    323  {
    324  object[] paras = new object[2];
    325  paras[0] = "IIsWebVirtualDir"; //表示操作的是虚拟目录
    326 paras[1] = strVirdir;
    327  rootfolder.Invoke("Delete",paras);
    328  rootfolder.CommitChanges();
    329  }
    330  else
    331  {
    332  System.Windows.Forms.MessageBox.Show("虚拟目录" strVirdir "不存在!");
    333  }
    334  }
    335 
    336         /// <summary>
    337         /// 批量更新
    338         /// </summary>
    339         public void UpdateBatch()
    340         {
    341             BatchUpdate(_virdirs);
    342         }
    343 
    344         /// <summary>
    345         /// 批量更新
    346         /// </summary>
    347         /// <param name="vds">虚拟目录集合</param>
    348         public void UpdateBatch(VirtualDirectories vds)
    349         {
    350             BatchUpdate(vds);
    351         }
    352 
    353         /// <summary>
    354         /// 获取虚拟目录集合
    355         /// </summary>
    356         /// <returns></returns>
    357         public VirtualDirectories GetVirtualDirdctories()
    358         {
    359             VirtualDirectories vds = GetVirDirs(this.rootfolder.Children);
    360             return vds;
    361         }
    362         #endregion
    363 
    364         #region 私有方法
    365 
    366         /// <summary>
    367         /// 关闭当前对象
    368         /// </summary>
    369         public void Close()
    370         {
    371             _virdirs.Clear();
    372             _virdirs = null;
    373             rootfolder.Dispose();
    374 
    375         }
    376 
    377         /// <summary>
    378         /// 连接服务器
    379         /// </summary>
    380         private void ConnectToServer()
    381  {
    382  string strPath = "IIS://" _server "/W3SVC/" _website "/ROOT";
    383  try
    384  {
    385  this.rootfolder = new DirectoryEntry(strPath);
    386  _virdirs = GetVirDirs(this.rootfolder.Children);
    387  } 
    388 catch(Exception)
    389  {
    390  System.Windows.Forms.MessageBox.Show("无法连接到服务器:" _server);
    391  }
    392  }
    393 
    394         /// <summary>
    395         /// 执行批量更新
    396         /// </summary>
    397         /// <param name="vds">虚拟目录集合</param>
    398         private void BatchUpdate(VirtualDirectories vds)
    399         {
    400             _batchflag = true;
    401             foreach (object item in vds.Values)
    402             {
    403                 VirtualDirectory vd = (VirtualDirectory)item;
    404                 switch (vd.flag)
    405                 {
    406                     case 0:
    407                         break;
    408                     case 1:
    409                         CreateVirtualDirectory(vd);
    410                         break;
    411                     case 2:
    412                         Update(vd);
    413                         break;
    414                 }
    415             }
    416             _batchflag = false;
    417         }
    418         /// <summary>
    419         /// 更新指定虚拟目录
    420         /// </summary>
    421         /// <param name="de"></param>
    422         /// <param name="vd">要执行更新的虚拟目录</param>
    423         private void UpdateDirInfo(DirectoryEntry de, VirtualDirectory vd)
    424         {
    425             de.Properties["AnonymousUserName"][0] = vd.AnonymousUserName;
    426             de.Properties["AnonymousUserPass"][0] = vd.AnonymousUserPass;
    
    427             de.Properties["AccessRead"][0] = vd.AccessRead;
    428             de.Properties["AccessExecute"][0] = vd.AccessExecute;
    429             de.Properties["AccessWrite"][0] = vd.AccessWrite;
    430             de.Properties["AuthBasic"][0] = vd.AuthBasic;
    431             de.Properties["AuthNTLM"][0] = vd.AuthNTLM;
    432             de.Properties["ContentIndexed"][0] = vd.ContentIndexed;
    433             de.Properties["EnableDefaultDoc"][0] = vd.EnableDefaultDoc;
    434             de.Properties["EnableDirBrowsing"][0] = vd.EnableDirBrowsing;
    435             de.Properties["AccessSSL"][0] = vd.AccessSSL;
    436             de.Properties["AccessScript"][0] = vd.AccessScript;
    437             de.Properties["DefaultDoc"][0] = vd.DefaultDoc;
    438             de.Properties["Path"][0] = vd.Path;
    439             de.CommitChanges();
    440         }
    441 
    442         /// <summary>
    443         /// 获取虚拟目录集合
    444         /// </summary>
    445         /// <param name="des"></param>
    446         /// <returns></returns>
    447         private VirtualDirectories GetVirDirs(DirectoryEntries des)
    448         {
    449             VirtualDirectories tmpdirs = new VirtualDirectories();
    450             foreach (DirectoryEntry de in des)
    451             {
    452                 if (de.SchemaClassName == "IIsWebVirtualDir")
    453                 {
    454                     VirtualDirectory vd = new VirtualDirectory();
    455                     vd.Name = de.Name;
    456                     vd.AccessRead = (bool)de.Properties["AccessRead"][0];
    457                     vd.AccessExecute = (bool)de.Properties["AccessExecute"][0];
    458                     vd.AccessWrite = (bool)de.Properties["AccessWrite"][0];
    459                     vd.AnonymousUserName = (string)de.Properties["AnonymousUserName"][0];
    460                     vd.AnonymousUserPass = (string)de.Properties["AnonymousUserName"][0];
    461                     vd.AuthBasic = (bool)de.Properties["AuthBasic"][0];
    462                     vd.AuthNTLM = (bool)de.Properties["AuthNTLM"][0];
    463                     vd.ContentIndexed = (bool)de.Properties["ContentIndexed"][0];
    464                     vd.EnableDefaultDoc = (bool)de.Properties["EnableDefaultDoc"][0];
    465                     vd.EnableDirBrowsing = (bool)de.Properties["EnableDirBrowsing"][0];
    466                     vd.AccessSSL = (bool)de.Properties["AccessSSL"][0];
    467                     vd.AccessScript = (bool)de.Properties["AccessScript"][0];
    468                     vd.Path = (string)de.Properties["Path"][0];
    469                     vd.flag = 0;
    470                     vd.DefaultDoc = (string)de.Properties["DefaultDoc"][0];
    471                     tmpdirs.Add(vd.Name, vd);
    472                 }
    473             }
    474             return tmpdirs;
    475         }
    476         #endregion
    477     }
    478 
    479     /// <summary>
    480     /// 虚拟目录实体
    481     /// </summary>
    482     public class VirtualDirectory
    483     {
    484         private bool _read, _execute, _script, _ssl, _write, _authbasic, _authntlm, _indexed, _endirbrow, _endefaultdoc;
    485         private string _ausername, _auserpass, _name, _path;
    486         private int _flag;
    487         private string _defaultdoc;
    488 
    489         #region 构造函数
    490         /// <summary>
    491         /// 构造函数
    492         /// </summary>
    493         public VirtualDirectory()
    494         {
    495             SetValue();
    496         }
    497 
    498         /// <summary>
    499         /// 构造函数
    500         /// </summary>
    501         /// <param name="sVirDirName">虚拟目录名</param>
    502         public VirtualDirectory(string sVirDirName)
    503         {
    504             SetValue();
    505             _name = sVirDirName;
    506         }
    507 
    508         /// <summary>
    509         /// 构造函数
    510         /// </summary>
    511         /// <param name="sVirDirName">虚拟目录名</param>
    512         /// <param name="strPhyPath">物理路径</param>
    513         /// <param name="AnonymousUser"></param>
    514         public VirtualDirectory(string sVirDirName, string strPhyPath, string[] AnonymousUser)
    515         {
    516             SetValue();
    517             _name = sVirDirName;
    518             _path = strPhyPath;
    519             _ausername = AnonymousUser[0];
    520             _auserpass = AnonymousUser[1];
    521         }
    522         #endregion
    523 
    524         /// <summary>
    525         /// 设置虚拟目录的属性
    526         /// </summary>
    527         private void SetValue()
    528         {
    529             _read = true;
    530             _execute = false;
    531             _script = true;
    532             _ssl = false;
    533             _write = false;
    534             _authbasic = false;
    535             _authntlm = true;
    536             _indexed = true;
    537             _endirbrow = false;
    538             _endefaultdoc = true;
    539             _flag = 1;
    540             _defaultdoc = "index.aspx";
    541             _path = "C:\\";
    542             _ausername = "IUSR_DEVE-SERVER";
    543             _auserpass = "IUSR_DEVE-SERVER";
    544             _name = "";
    545         }
    546 
    547         public override string ToString()
    548         {
    549             return this._name;
    550         }
    551 
    552 
    553         #region 定义属性
    554         public int flag
    555         {
    556             get { return _flag; }
    557             set { _flag = value; }
    558         }
    559         public bool AccessRead
    560         {
    561             get { return _read; }
    562             set { _read = value; }
    563         }
    564         public bool AccessWrite
    565         {
    566             get { return _write; }
    567             set { _write = value; }
    568         }
    569         public bool AccessExecute
    570         {
    571             get { return _execute; }
    572             set { _execute = value; }
    573         }
    574         public bool AccessSSL
    575         {
    576             get { return _ssl; }
    577             set { _ssl = value; }
    578         }
    579         public bool AccessScript
    580         {
    581             get { return _script; }
    582             set { _script = value; }
    583         }
    584         public bool AuthBasic
    585         {
    586             get { return _authbasic; }
    587             set { _authbasic = value; }
    588         }
    589         public bool AuthNTLM
    590         {
    591             get { return _authntlm; }
    592             set { _authntlm = value; }
    593         }
    594         public bool ContentIndexed
    595         {
    596             get { return _indexed; }
    597             set { _indexed = value; }
    598         }
    599         public bool EnableDirBrowsing
    600         {
    601             get { return _endirbrow; }
    602             set { _endirbrow = value; }
    603         }
    
    604         public bool EnableDefaultDoc
    605         {
    606             get { return _endefaultdoc; }
    607             set { _endefaultdoc = value; }
    608         }
    609         public string Name
    610         {
    611             get { return _name; }
    612             set { _name = value; }
    613         }
    614         public string Path
    615         {
    616             get { return _path; }
    617             set { _path = value; }
    618         }
    619         public string DefaultDoc
    620         {
    621             get { return _defaultdoc; }
    622             set { _defaultdoc = value; }
    623         }
    624         public string AnonymousUserName
    625         {
    626             get { return _ausername; }
    627             set { _ausername = value; }
    628         }
    629         public string AnonymousUserPass
    630         {
    631             get { return _auserpass; }
    632             set { _auserpass = value; }
    633         }
    634         #endregion
    635     }
    636 
    637     /// <summary>
    638     /// 虚拟目录集合类
    639     /// </summary>
    640     public class VirtualDirectories : System.Collections.Hashtable
    641     {
    642         public VirtualDirectories()
    643         {
    644         }
    645 
    646         /// <summary>
    647         /// 搜索指定的虚拟目录
    648         /// </summary>
    649         /// <param name="strName">虚拟目录名</param>
    650         /// <returns></returns>
    651         public VirtualDirectory Find(string strName)
    652         {
    653             return (VirtualDirectory)this[strName];
    654         }
    655     }
    656 }
  • 相关阅读:
    如何辨别护照的种类
    C#枚举中使用Flags特性
    那些年,我们一起学WCF--(7)PerSession实例行为
    64位系统使用Access 数据库文件的彻底解决方法
    从Excel中导入数据时,提示“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决办法
    TortoiseSVN与VisualSVN Server搭建SVN版本控制系统
    解决Winform程序在不同分辨率系统下界面混乱
    【已解决】Https请求——基础连接已经关闭 发送时发生错误
    Entity Framework Code First学习系列目录
    PowerDesigner之PDM(物理概念模型)各种属性建立如PK,AK等
  • 原文地址:https://www.cnblogs.com/tearer/p/2523816.html
Copyright © 2011-2022 走看看