Asp.Net IIS 管理类(全)

本文介绍了一个用于管理IIS的C#类库,包括创建站点、虚拟目录及删除虚拟目录等功能。通过该类库,开发者可以方便地进行IIS相关的配置操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出处:http://www.cnblogs.com/wubiyu/archive/2007/07/06/807828.html

 1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4
  5using System;
  6using System.Data;
  7using System.DirectoryServices;
  8using System.Collections;
  9
 10namespace IISManage
 11{
 12    ///<summary> 
 13    /// IIS管理类,可以实现创建站点、虚拟目录,删除虚拟目录等 /// 
 14    /// </summary> 

 15    public class IISManager
 16    {
 17
 18        private string _server, _website, _AnonymousUserPass, _AnonymousUserName;
 19        private VirtualDirectories _virdirs;
 20        protected System.DirectoryServices.DirectoryEntry rootfolder;
 21        private bool _batchflag;
 22
 23
 24        #region 构造函数
 25        /// <summary>  
 26        /// 构造函数  /// 
 27        /// </summary>  

 28        public IISManager()
 29        {
 30            //默认情况下使用localhost,即访问本地机   
 31            _server = "localhost"; _website = "1"; _batchflag = false;
 32        }

 33
 34
 35        /// <summary>  
 36        /// 构造函数  
 37        /// </summary>  
 38        /// <param name="strServer">服务器</param>  

 39        public IISManager(string strServer)
 40        {
 41            _server = strServer;
 42            _website = "1"; _batchflag = false;
 43        }

 44
 45
 46        /// <summary>  
 47        /// 构造函数  
 48        /// </summary>  
 49        /// <param name="strServer">服务器</param>  
 50        /// <param name="website">站点,每一个站点为1,第二个站点为2,依此类推</param>  

 51        public IISManager(string strServer, int website)
 52        {
 53            _server = strServer;
 54            _website = website.ToString();
 55            _batchflag = false;
 56        }

 57        #endregion
    #region 定义公共属性
 58
 59
 60        /// <summary>  
 61        /// 匿名访问用户  
 62        /// </summary>  

 63        public string AnonymousUserName
 64        {
 65            get return _AnonymousUserName; }
 66            set { _AnonymousUserName = value; }
 67        }

 68
 69
 70        /// <summary>  
 71        /// 匿名访问用户密码  
 72        /// </summary>  

 73        public string AnonymousUserPass
 74        {
 75            get return _AnonymousUserPass; }
 76            set { _AnonymousUserPass = value; }
 77        }

 78
 79
 80        /// <summary>  
 81        /// 服务器,可以是IP或计算名  
 82        /// </summary>  

 83        public string Server
 84        {
 85            get return _server; }
 86            set { _server = value; }
 87        }

 88
 89        /// <summary>  
 90        /// 站点,一般来说第一台主机为1,第二台主机为2,依次类推  
 91        /// </summary>  

 92        public int WebSite
 93        {
 94            get return Convert.ToInt32(_website); }
 95            set { _website = Convert.ToString(value); }
 96        }

 97
 98
 99        /// <summary>  
100        /// 虚拟目录的名字  
101        /// </summary>  

102        public VirtualDirectories VirDirs
103        {
104            get return _virdirs; }
105            set { _virdirs = value; }
106        }

107
108
109
110        #region 定义公共方法
111        /// <summary>  
112        /// 获取匿名访问用户的用户名和密码  
113        /// </summary>  

114        public void get_AnonymousUser()
115        {
116            _AnonymousUserPass = "IUSR_DEVE-SERVER";
117            _AnonymousUserName = "IUSR_DEVE-SERVER";
118            VirtualDirectory vDir;
119            try
120            {
121                Hashtable myList = (Hashtable)_virdirs;
122                IDictionaryEnumerator myEnumerator = myList.GetEnumerator();
123                while (myEnumerator.MoveNext())
124                {
125                    vDir = (VirtualDirectory)myEnumerator.Value;
126                    if (vDir.AnonymousUserName != "" && vDir.AnonymousUserPass != "")
127                    {
128                        _AnonymousUserName = vDir.AnonymousUserName;
129                        _AnonymousUserPass = vDir.AnonymousUserPass;
130                        break;
131                    }

132                }

133            }

134            catch
135            {
136                _AnonymousUserPass = "IUSR_DEVE-SERVER";
137                _AnonymousUserName = "IUSR_DEVE-SERVER";
138            }

139        }

140
141
142        /// <summary>  
143        /// 连接服务器  
144        /// </summary>  

145        public void Connect()
146        {
147            ConnectToServer();
148        }

149        /// <summary>  
150        /// 连接服务器  
151        /// </summary> 
152        /// <param name="strServer">服务器名称</param>  

153        public void Connect(string strServer)
154        {
155            _server = strServer;
156            ConnectToServer();
157        }

158        /// <summary>  
159        /// 连接服务器  
160        /// </summary>  
161        /// <param name="strServer">服务器名称</param>  
162        /// <param name="strWebSite">站点,一般来说第一台主机为1,第二台主机为2,依次类推</param>  

163        public void Connect(string strServer, string strWebSite)
164        {
165            _server = strServer;
166            _website = strWebSite;
167            ConnectToServer();
168        }

169
170
171        /// <summary>  
172        /// 添加一个站点  
173        /// </summary>  
174        /// <param name="path">站点的路径</param>  

175        public void CreateWebSite(string webSiteName, string port, string path)
176        {
177            try
178            {
179                DirectoryEntry root = new DirectoryEntry("IIS://" + this._server + "/W3SVC");
180                int siteID = 1;
181                foreach (DirectoryEntry e in root.Children)
182                {
183                    if (e.SchemaClassName == "IIsWebServer")
184                    {
185                        int ID = Convert.ToInt32(e.Name);
186                        if (ID >= siteID) { siteID = ID + 1; }
187                        if (e.Properties["ServerBindings"][0].ToString() == ":" + port + ":")
188                        {
189                            throw new Exception(port + "已被占用,请选择其它端口!");
190                        }

191                    }

192                }

193                DirectoryEntry site = (DirectoryEntry)root.Invoke("Create""IIsWebServer", siteID);
194                site.Invoke("Put""ServerComment", webSiteName); site.Invoke("Put""KeyType""IIsWebServer");
195                site.Invoke("Put""ServerBindings"":" + port + ":"); site.Invoke("Put""ServerState"2);
196                site.Invoke("Put""FrontPageWeb"1); site.Invoke("Put""DefaultDoc""index.aspx");
197                site.Invoke("Put""SecureBindings"":443:"); site.Invoke("Put""ServerAutoStart"1);
198                site.Invoke("Put""ServerSize"1); site.Invoke("SetInfo");
199                DirectoryEntry siteVDir = site.Children.Add("Root""IISWebVirtualDir");
200                siteVDir.Properties["AppIsolated"][0= 2;
201                siteVDir.Properties["Path"][0= path;
202                siteVDir.Properties["AccessFlags"][0= 513;
203                siteVDir.Properties["FrontPageWeb"][0= 1;
204                siteVDir.Properties["AppRoot"][0= "LM/W3SVC/" + siteID + "/Root";
205                siteVDir.Properties["AppFriendlyName"][0= "ROOT";
206                siteVDir.CommitChanges(); site.CommitChanges();
207            }

208            catch (Exception ex)
209            {
210                throw ex;
211            }

212        }

213
214
215        /// <summary> 
216        /// 取得所有站点  
217        /// </summary>  
218        /// <returns></returns>  

219        public System.Collections.Hashtable getSites()
220        {
221            try
222            {
223                DirectoryEntry root = new DirectoryEntry("IIS://" + this._server + "/W3SVC");
224                Hashtable sites = new Hashtable();
225                foreach (DirectoryEntry e in root.Children)
226                {
227                    if (e.SchemaClassName == "IIsWebServer")
228                    {
229                        sites.Add(e.Name, e);
230                    }

231                }

232                return sites;
233            }

234            catch (Exception ex)
235            {
236                throw ex;
237            }

238        }

239
240
241        /// <summary>  
242        /// 判断是否存这个虚拟目录  
243        /// </summary>  
244        /// <param name="strVirdir">虚拟目录名称</param>  
245        /// <returns></returns>  

246        public bool Exists(string strVirdir)
247        {
248            return _virdirs.Contains(strVirdir);
249        }

250        /// <summary>  
251        /// 添加一个虚拟目录  
252        /// </summary>  
253        /// <param name="newdir">虚拟目录</param>  
254        /// <returns></returns>  

255        public bool CreateVirtualDirectory(VirtualDirectory newdir)
256        {
257            string strPath = "IIS://" + _server + "/W3SVC/" + _website + "/ROOT/" + newdir.Name;
258            if (!_virdirs.Contains(newdir.Name) || _batchflag)
259            {
260                try
261                {
262                    //加入到ROOT的Children集合中去   
263                    DirectoryEntry newVirDir = rootfolder.Children.Add(newdir.Name, "IIsWebVirtualDir");
264                    newVirDir.Invoke("AppCreate"true);
265                    newVirDir.CommitChanges();
266                    rootfolder.CommitChanges();
267                    //然后更新数据 
268                    UpdateDirInfo(newVirDir, newdir);
269                    return true;
270                }

271                catch (Exception)
272                {
273                    return false;
274                }

275            }

276            else
277            {
278                return false;
279            }

280        }

281        /// <summary>  
282        /// 得到一个虚拟目录  
283        /// </summary>  
284        /// <param name="strVirdir">虚拟目录名</param>  
285        /// <returns></returns>  

286        public VirtualDirectory GetVirDir(string strVirdir)
287        {
288            VirtualDirectory tmp = null;
289            if (_virdirs.Contains(strVirdir))
290            {
291                tmp = _virdirs.Find(strVirdir);
292                ((VirtualDirectory)_virdirs[strVirdir]).flag = 2;
293            }

294            else
295            {
296                throw new Exception("虚拟目录" + strVirdir + "不存在!");
297            }

298            return tmp;
299        }

300
301
302        /// <summary> 
303        /// 更新一个虚拟目录  
304        /// </summary>  
305        /// <param name="dir">虚拟目录</param>  

306        public void Update(VirtualDirectory dir)
307        {
308            //判断需要更改的虚拟目录是否存在 
309            if (_virdirs.Contains(dir.Name))
310            {
311                DirectoryEntry ode = rootfolder.Children.Find(dir.Name, "IIsWebVirtualDir");
312                UpdateDirInfo(ode, dir);
313            }

314            else
315            {
316                System.Windows.Forms.MessageBox.Show("虚拟目录" + dir.Name + "不存在!");
317            }

318        }

319        /// <summary> 
320        /// 删除一个虚拟目录  
321        /// </summary>  
322        /// <param name="strVirdir">虚拟目录名</param>  

323        public void Delete(string strVirdir)
324        {
325            if (_virdirs.Contains(strVirdir))
326            {
327                object[] paras = new object[2];
328                paras[0= "IIsWebVirtualDir";
329                //表示操作的是虚拟目录  
330                paras[1= strVirdir;
331                rootfolder.Invoke("Delete", paras);
332                rootfolder.CommitChanges();
333            }

334            else
335            {
336                System.Windows.Forms.MessageBox.Show("虚拟目录" + strVirdir + "不存在!");
337            }

338        }

339        /// <summary>  
340        /// 批量更新  
341        /// </summary>  

342        public void UpdateBatch()
343        {
344            BatchUpdate(_virdirs);
345        }

346
347
348        /// <summary>  
349        /// 批量更新  
350        /// </summary>  
351        /// <param name="vds">虚拟目录集合</param> 

352        public void UpdateBatch(VirtualDirectories vds)
353        {
354            BatchUpdate(vds);
355        }

356
357
358        /// <summary> 
359        /// 获取虚拟目录集合  
360        /// </summary>  
361        /// <returns></returns>  

362        public VirtualDirectories GetVirtualDirdctories()
363        {
364            VirtualDirectories vds = GetVirDirs(this.rootfolder.Children);
365            return vds;
366        }

367        #endregion

368
369        #region 私有方法
370
371
372        /// <summary>  
373        /// 关闭当前对象  
374        /// </summary>  

375        public void Close()
376        {
377            _virdirs.Clear();
378            _virdirs = null;
379            rootfolder.Dispose();
380        }

381        /// <summary>  
382        /// 连接服务器  
383        /// </summary>  

384        private void ConnectToServer()
385        {
386            string strPath = "IIS://" + _server + "/W3SVC/" + _website + "/ROOT";
387            try
388            {
389                this.rootfolder = new DirectoryEntry(strPath);
390                _virdirs = GetVirDirs(this.rootfolder.Children);
391            }

392            catch (Exception)
393            {
394                System.Windows.Forms.MessageBox.Show("无法连接到服务器:" + _server);
395            }

396        }

397        /// <summary>  
398        /// 执行批量更新  
399        /// </summary>  
400        /// <param name="vds">虚拟目录集合</param> 

401        private void BatchUpdate(VirtualDirectories vds)
402        {
403            _batchflag = true;
404            foreach (object item in vds.Values)
405            {
406                VirtualDirectory vd = (VirtualDirectory)item;
407                switch (vd.flag)
408                {
409                    case 0:
410                        break;
411                    case 1:
412                        CreateVirtualDirectory(vd);
413                        break;
414                    case 2:
415                        Update(vd);
416                        break;
417                }

418            }

419            _batchflag = false;
420        }

421        /// <summary>  
422        /// 更新指定虚拟目录  
423        /// </summary>  
424        /// <param name="de"></param>  
425        /// <param name="vd">要执行更新的虚拟目录</param>  

426        private void UpdateDirInfo(DirectoryEntry de, VirtualDirectory vd)
427        {
428            de.Properties["AnonymousUserName"][0= vd.AnonymousUserName;
429            de.Properties["AnonymousUserPass"][0= vd.AnonymousUserPass;
430            de.Properties["AccessRead"][0= vd.AccessRead;
431            de.Properties["AccessExecute"][0= vd.AccessExecute;
432            de.Properties["AccessWrite"][0= vd.AccessWrite;
433            de.Properties["AuthBasic"][0= vd.AuthBasic;
434            de.Properties["AuthNTLM"][0= vd.AuthNTLM;
435            de.Properties["ContentIndexed"][0= vd.ContentIndexed;
436            de.Properties["EnableDefaultDoc"][0= vd.EnableDefaultDoc;
437            de.Properties["EnableDirBrowsing"][0= vd.EnableDirBrowsing;
438            de.Properties["AccessSSL"][0= vd.AccessSSL;
439            de.Properties["AccessScript"][0= vd.AccessScript;
440            de.Properties["DefaultDoc"][0= vd.DefaultDoc;
441            de.Properties["Path"][0= vd.Path;
442            de.CommitChanges();
443        }

444
445
446        /// 获取虚拟目录集合
447        /// </summary>  
448        /// <param name="des"></param> 
449        /// <returns></returns>  

450        private VirtualDirectories GetVirDirs(DirectoryEntries des)
451        {
452            VirtualDirectories tmpdirs = new VirtualDirectories();
453            foreach (DirectoryEntry de in des)
454            {
455                if (de.SchemaClassName == "IIsWebVirtualDir")
456                {
457                    VirtualDirectory vd = new VirtualDirectory();
458                    vd.Name = de.Name;
459                    vd.AccessRead = (bool)de.Properties["AccessRead"][0];
460                    vd.AccessExecute = (bool)de.Properties["AccessExecute"][0];
461                    vd.AccessWrite = (bool)de.Properties["AccessWrite"][0];
462                    vd.AnonymousUserName = (string)de.Properties["AnonymousUserName"][0];
463                    vd.AnonymousUserPass = (string)de.Properties["AnonymousUserName"][0];
464                    vd.AuthBasic = (bool)de.Properties["AuthBasic"][0];
465                    vd.AuthNTLM = (bool)de.Properties["AuthNTLM"][0];
466                    vd.ContentIndexed = (bool)de.Properties["ContentIndexed"][0];
467                    vd.EnableDefaultDoc = (bool)de.Properties["EnableDefaultDoc"][0];
468                    vd.EnableDirBrowsing = (bool)de.Properties["EnableDirBrowsing"][0];
469                    vd.AccessSSL = (bool)de.Properties["AccessSSL"][0];
470                    vd.AccessScript = (bool)de.Properties["AccessScript"][0];
471                    vd.Path = (string)de.Properties["Path"][0];
472                    vd.flag = 0; vd.DefaultDoc = (string)de.Properties["DefaultDoc"][0];
473                    tmpdirs.Add(vd.Name, vd);
474                }

475            }

476            return tmpdirs;
477        }

478        #endregion

479    }

480    /// <summary> 
481    /// 虚拟目录实体 
482    /// </summary> 

483    public class VirtualDirectory
484    {
485        private bool _read, _execute, _script, _ssl, _write, _authbasic, _authntlm, _indexed, _endirbrow, _endefaultdoc;
486        private string _ausername, _auserpass, _name, _path;
487        private int _flag;
488        private string _defaultdoc;
489
490        /// <summary>  
491        /// 构造函数  
492        /// </summary>  

493        public VirtualDirectory()
494        {
495            SetValue();
496        }

497
498
499        /// <summary>  
500        /// 构造函数 
501        /// </summary>  
502        /// <param name="sVirDirName">虚拟目录名</param> 

503        public VirtualDirectory(string sVirDirName)
504        {
505            SetValue();
506            _name = sVirDirName;
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
523
524
525        /// <summary> 
526        /// 设置虚拟目录的属性  
527        /// </summary>  

528        private void SetValue()
529        {
530            _read = true;
531            _execute = false;
532            _script = true;
533            _ssl = false;
534            _write = false;
535            _authbasic = false;
536            _authntlm = true;
537            _indexed = true;
538            _endirbrow = false;
539            _endefaultdoc = true;
540            _flag = 1;
541            _defaultdoc = "index.aspx";
542            _path = "C://";
543            _ausername = "IUSR_DEVE-SERVER";
544            _auserpass = "IUSR_DEVE-SERVER";
545            _name = "";
546        }

547
548
549        public override string ToString()
550        {
551            return this._name;
552        }

553
554        定义属性
636    }

637
638
639    /// <summary> 
640    /// 虚拟目录集合类 
641    /// </summary> 

642    public class VirtualDirectories : System.Collections.Hashtable
643    {
644        public VirtualDirectories() { }
645        /// <summary>  
646        /// 搜索指定的虚拟目录  
647        /// </summary>  
648        /// <param name="strName">虚拟目录名</param>  
649        /// <returns></returns>  

650        public VirtualDirectory Find(string strName)
651        {
652            return (VirtualDirectory)this[strName];
653        }

654    }

655}

656
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值