设为首页 收藏本站
查看: 783|回复: 0

[经验分享] Asp.Net IIS 管理类(全)

[复制链接]

尚未签到

发表于 2017-2-12 09:19:50 | 显示全部楼层 |阅读模式
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        定义属性#region 定义属性
555        public int flag
556        {
557            get { return _flag; }
558            set { _flag = value; }
559        }
560        public bool AccessRead
561        {
562            get { return _read; }
563            set { _read = value; }
564        }
565        public bool AccessWrite
566        {
567            get { return _write; }
568            set { _write = value; }
569        }
570        public bool AccessExecute
571        {
572            get { return _execute; }
573            set { _execute = value; }
574        }
575        public bool AccessSSL
576        {
577            get { return _ssl; }
578            set { _ssl = value; }
579        }
580        public bool AccessScript
581        {
582            get { return _script; }
583            set { _script = value; }
584        }
585        public bool AuthBasic
586        {
587            get { return _authbasic; }
588            set { _authbasic = value; }
589        }
590        public bool AuthNTLM
591        {
592            get { return _authntlm; }
593            set { _authntlm = value; }
594        }
595        public bool ContentIndexed
596        {
597            get { return _indexed; }
598            set { _indexed = value; }
599        }
600        public bool EnableDirBrowsing
601        {
602            get { return _endirbrow; }
603            set { _endirbrow = value; }
604        }
605        public bool EnableDefaultDoc
606        {
607            get { return _endefaultdoc; }
608            set { _endefaultdoc = value; }
609        }
610        public string Name
611        {
612            get { return _name; }
613            set { _name = value; }
614        }
615        public string Path
616        {
617            get { return _path; }
618            set { _path = value; }
619        }
620        public string DefaultDoc
621        {
622            get { return _defaultdoc; }
623            set { _defaultdoc = value; }
624        }
625        public string AnonymousUserName
626        {
627            get { return _ausername; }
628            set { _ausername = value; }
629        }
630        public string AnonymousUserPass
631        {
632            get { return _auserpass; }
633            set { _auserpass = value; }
634        }
635        #endregion
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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-340928-1-1.html 上篇帖子: 如何高效查看IIS日志文件 下篇帖子: ASP.NET Process Model 之一:IIS 和 ASP.NET ISAPI
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表