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

[经验分享] IIS操作类

[复制链接]

尚未签到

发表于 2015-8-14 13:10:48 | 显示全部楼层 |阅读模式
  添加引用 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 }
  

运维网声明 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-98984-1-1.html 上篇帖子: 如何让MVC运行在iis6.0上 在IIS里面配置MVC项目 下篇帖子: IIS Web服务器已设置为允许匿名访问,但客户端仍然要求输入用户名和密码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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