1
using
System;
2 using System.Data;
3 using System.DirectoryServices;
4 using System.Collections;
5
6 namespace CreateWebDir
7 {
8/**//// <summary>
9/// IISManager 的摘要说明。
10/// </summary>
11public class IISManager
12{
13//定义需要使用的
14private string _server,_website,_AnonymousUserPass,_AnonymousUserName;
15private VirtualDirectories _virdirs;
16protected System.DirectoryServices.DirectoryEntry rootfolder;
17private bool _batchflag;
18/**//// <summary>
19/// 默认情况下使用localhost,即访问本地机
20/// </summary>
21public IISManager()
22{
23_server = "localhost";
24_website = "1";
25_batchflag = false;
26}
27/**//// <summary>
28///
29/// </summary>
30/// <param name="strServer">主机名称</param>
31public IISManager(string strServer)
32{
33_server = strServer;
34_website = "1";
35_batchflag = false;
36}
37/**//// <summary>
38/// 生成一个新的站点
39/// </summary>
40/// <param name="webSiteName">站点名称</param>
41/// <param name="pathToRoot">物理地址</param>
42/// <returns></returns>
43public int CreateWebSite(string webSiteName, string pathToRoot)
44{
45DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC");
46// Find unused ID value for new web site
47int siteID = 1;
48foreach(DirectoryEntry e in root.Children)
49{
50if(e.SchemaClassName == "IIsWebServer")
51{
52int ID = Convert.ToInt32(e.Name);
53if(ID >= siteID)
54{
55siteID = ID+1;
56}
57}
58}
59// Create web site
60DirectoryEntry site = (DirectoryEntry)root.Invoke("Create", "IIsWebServer", siteID);
61site.Invoke("Put", "ServerComment", webSiteName);
62site.Invoke("Put", "KeyType", "IIsWebServer");
63site.Invoke("Put", "ServerBindings", ":80:");
64site.Invoke("Put", "ServerState", 2);
65site.Invoke("Put", "FrontPageWeb", 1);
66site.Invoke("Put", "DefaultDoc", "Default.aspx");
67site.Invoke("Put", "SecureBindings", ":443:");
68site.Invoke("Put", "ServerAutoStart", 1);
69site.Invoke("Put", "ServerSize", 1);
70site.Invoke("SetInfo");
71// Create application virtual directory
72DirectoryEntry siteVDir = site.Children.Add("Root", "IISWebVirtualDir");
73siteVDir.Properties["AppIsolated"][0] = 2;
74siteVDir.Properties["Path"][0] = pathToRoot;
75siteVDir.Properties["AccessFlags"][0] = 513;
76siteVDir.Properties["FrontPageWeb"][0] = 1;
77siteVDir.Properties["AppRoot"][0] = "LM/W3SVC/"+siteID+"/Root";
78siteVDir.Properties["AppFriendlyName"][0] = "Root";
79siteVDir.CommitChanges();
80site.CommitChanges();
81return siteID;
82}
83
84 /**//// <summary>
85 /// 获得匿名用户
86 /// </summary>
87public void get_AnonymousUser()
88{
89_AnonymousUserPass="IUSR_DEVE-SERVER";
90_AnonymousUserName="IUSR_DEVE-SERVER";
91VirtualDirectory vDir;
92try
93{
94Hashtable myList = (Hashtable)_virdirs;
95IDictionaryEnumerator myEnumerator = myList.GetEnumerator();
96while ( myEnumerator.MoveNext() )
97{
98vDir = (VirtualDirectory)myEnumerator.Value;
99if (vDir.AnonymousUserName!="" && vDir.AnonymousUserPass != "")
100{
101_AnonymousUserName=vDir.AnonymousUserName;
102_AnonymousUserPass=vDir.AnonymousUserPass;
103break;
104}
105}
106}
107catch
108{
109_AnonymousUserPass="IUSR_DEVE-SERVER";
110_AnonymousUserName="IUSR_DEVE-SERVER";
111}
112}
113/**//// <summary>
114/// 匿名用户名
115/// </summary>
116public string AnonymousUserName
117{
118get{ return _AnonymousUserName;}
119set{ _AnonymousUserName = value;}
120}
121/**//// <summary>
122/// 匿名用户密码
123/// </summary>
124public string AnonymousUserPass
125{
126get{ return _AnonymousUserPass;}
127set{ _AnonymousUserPass = value;}
128}
129
130/**//// <summary>
131/// Server属性定义访问机器的名字,可以是IP与计算名
132/// </summary>
133public string Server
134{
135get{ return _server;}
136set{ _server = value;}
137}
138/**//// <summary>
139/// WebSite属性定义,为一数字,为方便,使用string
140/// 一般来说第一台主机为1,第二台主机为2,依次类推
141/// </summary>
142public string WebSite
143{
144get{ return _website; }
145set{ _website = value; }
146}
147
148/**//// <summary>
149/// 虚拟目录的名字
150/// </summary>
151public VirtualDirectories VirDirs
152{
153get{ return _virdirs; }
154set{ _virdirs = value;}
155}
156/**////<summary>
157///定义公共方法
158///</summary>
159
160
161/// <summary>
162/// 连接服务器
163/// </summary>
164public void Connect()
165{
166ConnectToServer();
167}
168
169/**//// <summary>
170/// 为方便重载
171/// </summary>
172public void Connect(string strServer)
173{
174_server = strServer;
175ConnectToServer();
176}
177
178/**//// <summary>
179/// 为方便重载
180/// </summary>
181/// <param name="strServer"></param>
182/// <param name="strWebSite"></param>
183public void Connect(string strServer,string strWebSite)
184{
185_server = strServer;
186_website = strWebSite;
187ConnectToServer();
188}
189/**//// <summary>
190/// 判断是否存这个虚拟目录
191/// </summary>
192/// <param name="strVirdir"></param>
193/// <returns></returns>
194public bool Exists(string strVirdir)
195{
196return _virdirs.Contains(strVirdir);
197}
198
199/**//// <summary>
200/// 添加一个虚拟目录
201/// </summary>
202/// <param name="newdir">虚拟目录的实例</param>
203/// <returns></returns>
204public bool Create(VirtualDirectory newdir)
205{
206string strPath = "IIS://" + _server + "/W3SVC/" + _website + "/ROOT/" + newdir.Name;
207if(!_virdirs.Contains(newdir.Name) || _batchflag )
208{
209try
210{
211//加入到ROOT的Children集合中去
212DirectoryEntry newVirDir = rootfolder.Children.Add(newdir.Name,"IIsWebVirtualDir");
213newVirDir.Invoke("AppCreate",true);
214newVirDir.CommitChanges();
215rootfolder.CommitChanges();
216//然后更新数据
217UpdateDirInfo(newVirDir,newdir);
218return true;
219}
220catch(Exception ee)
221{
222//throw new Exception(ee.ToString());
223return false;
224}
225}
226else
227{
228return true;
229//throw new Exception("This virtual directory is already exist.");
230}
231}
232
233/**//// <summary>
234/// 得到一个虚拟目录
235/// </summary>
236/// <param name="strVirdir"></param>
237/// <returns></returns>
238public VirtualDirectory GetVirDir(string strVirdir)
239{
240VirtualDirectory tmp = null;
241if(_virdirs.Contains(strVirdir))
242{
243tmp = _virdirs.Find(strVirdir);
244((VirtualDirectory)_virdirs[strVirdir]).flag = 2;
245}
246else
247{
248//throw new Exception("This virtual directory is not exists");
249}
250return tmp;
251}
252
253
254/**//// <summary>
255/// 更新一个虚拟目录
256/// </summary>
257/// <param name="dir"></param>
258public void Update(VirtualDirectory dir)
259{
260//判断需要更改的虚拟目录是否存在
261if(_virdirs.Contains(dir.Name))
262{
263DirectoryEntry ode = rootfolder.Children.Find(dir.Name,"IIsWebVirtualDir");
264UpdateDirInfo(ode,dir);
265}
266else
267{
268//throw new Exception("This virtual directory is not exists.");
269}
270}
271
272
273/**//// <summary>
274/// 删除一个虚拟目录
275/// </summary>
276/// <param name="strVirdir"></param>
277public void Delete(string strVirdir)
278{
279if(_virdirs.Contains(strVirdir))
280{
281object[] paras = new object[2];
282paras[0] = "IIsWebVirtualDir"; //表示操作的是虚拟目录
283paras[1] = strVirdir;
284rootfolder.Invoke("Delete",paras);
285rootfolder.CommitChanges();
286}
287else
288{
289//throw new Exception("Can''t delete " + strVirdir + ",because it isn''t exists.");
290}
291}
292
293/**//// <summary>
294/// 批量更新
295/// </summary>
296public void UpdateBatch()
297{
298BatchUpdate(_virdirs);
299}
300//重载一个:-)
301public void UpdateBatch(VirtualDirectories vds)
302{
303BatchUpdate(vds);
304}
305
306/**////<summary>
307///私有方法
308///</summary>
309
310public void Close()
311{
312_virdirs.Clear();
313_virdirs = null;
314rootfolder.Dispose();
315
316}
317
318/**//// <summary>
319/// 连接服务器
320/// </summary>
321private void ConnectToServer()
322{
323string strPath = "IIS://" + _server + "/W3SVC/" + _website +"/ROOT";
324try
325{
326this.rootfolder = new DirectoryEntry(strPath);
327_virdirs = GetVirDirs(this.rootfolder.Children);
328}
329catch(Exception e)
330{
331//throw new Exception("Can''t connect to the server ["+ _server +"] ",e);
332}
333}
334//执行批量更新
335private void BatchUpdate(VirtualDirectories vds)
336{
337_batchflag = true;
338foreach(object item in vds.Values)
339{
340VirtualDirectory vd = (VirtualDirectory)item;
341switch(vd.flag)
342{
343case 0:
344break;
345case 1:
346Create(vd);
347break;
348case 2:
349Update(vd);
350break;
351}
352}
353_batchflag = false;
354}
355//更新东东
356private void UpdateDirInfo(DirectoryEntry de,VirtualDirectory vd)
357{
358de.Properties["AnonymousUserName"][0] = vd.AnonymousUserName;
359de.Properties["AnonymousUserPass"][0] = vd.AnonymousUserPass;
360de.Properties["AccessRead"][0] = vd.AccessRead;
361de.Properties["AccessExecute"][0] = vd.AccessExecute;
362de.Properties["AccessWrite"][0] = vd.AccessWrite;
363de.Properties["AuthBasic"][0] = vd.AuthBasic;
364de.Properties["AuthNTLM"][0] = vd.AuthNTLM;
365de.Properties["ContentIndexed"][0] = vd.ContentIndexed;
366de.Properties["EnableDefaultDoc"][0] = vd.EnableDefaultDoc;
367de.Properties["EnableDirBrowsing"][0] = vd.EnableDirBrowsing;
368de.Properties["AccessSSL"][0] = vd.AccessSSL;
369de.Properties["AccessScript"][0] = vd.AccessScript;
370de.Properties["DefaultDoc"][0] = vd.DefaultDoc;
371de.Properties["Path"][0] = vd.Path;
372de.Properties["AppFriendlyName"][0] = vd.AppFriendlyName;
373de.CommitChanges();
374}
375
376//获取虚拟目录集合
377private VirtualDirectories GetVirDirs(DirectoryEntries des)
378{
379VirtualDirectories tmpdirs = new VirtualDirectories();
380foreach(DirectoryEntry de in des)
381{
382if(de.SchemaClassName == "IIsWebVirtualDir")
383{
384VirtualDirectory vd = new VirtualDirectory();
385vd.Name = de.Name;
386vd.AccessRead = (bool)de.Properties["AccessRead"][0];
387vd.AccessExecute = (bool)de.Properties["AccessExecute"][0];
388vd.AccessWrite = (bool)de.Properties["AccessWrite"][0];
389vd.AnonymousUserName = (string)de.Properties["AnonymousUserName"][0];
390vd.AnonymousUserPass = (string)de.Properties["AnonymousUserName"][0];
391vd.AuthBasic = (bool)de.Properties["AuthBasic"][0];
392vd.AuthNTLM = (bool)de.Properties["AuthNTLM"][0];
393vd.ContentIndexed = (bool)de.Properties["ContentIndexed"][0];
394vd.EnableDefaultDoc = (bool)de.Properties["EnableDefaultDoc"][0];
395vd.EnableDirBrowsing = (bool)de.Properties["EnableDirBrowsing"][0];
396vd.AccessSSL = (bool)de.Properties["AccessSSL"][0];
397vd.AccessScript = (bool)de.Properties["AccessScript"][0];
398vd.Path = (string)de.Properties["Path"][0];
399vd.flag = 0;
400vd.AppFriendlyName=(string)de.Properties["AppFriendlyName"][0];
401vd.DefaultDoc = (string)de.Properties["DefaultDoc"][0];
402tmpdirs.Add(vd.Name,vd);
403}
404}
405return tmpdirs;
406}
407
408}
409/**//// <summary>
410/// VirtualDirectory类
411/// </summary>
412public class VirtualDirectory
413{
414private bool _read,_execute,_script,_ssl,_write,_authbasic,_authntlm, _indexed,_endirbrow,_endefaultdoc;
415private string _ausername,_auserpass,_name,_path,_appfriendlyname;
416private int _flag;
417private string _defaultdoc;
418/**//// <summary>
419/// 构造函数
420/// </summary>
421public VirtualDirectory()
422{
423SetValue();
424}
425/**//// <summary>
426/// 构造函数
427/// </summary>
428/// <param name="sVirDirName">虚拟目录的名字</param>
429public VirtualDirectory(string sVirDirName)
430{
431SetValue();
432_name = sVirDirName;
433}
434/**//// <summary>
435/// 构造函数
436/// </summary>
437/// <param name="sVirDirName">虚拟路径</param>
438/// <param name="strPhyPath">物理路径</param>
439/// <param name="AnonymousUser">匿名用户名和密码</param>
440public VirtualDirectory(string sVirDirName,string strPhyPath,string[] AnonymousUser)
441{
442SetValue();
443_name = sVirDirName;
444_path = strPhyPath;
445_ausername = AnonymousUser[0];
446_auserpass = AnonymousUser[1];
447}
448private void SetValue()
449{
450_read = true;_execute = false;_script = true;_ssl= false;_write=false;_authbasic=false;
451_authntlm=true;_indexed = true;_endirbrow=false;_endefaultdoc = true;
452_flag = 1;
453_defaultdoc = "default.htm,default.aspx,default.asp,index.htm";
454_path = "C://";
455_appfriendlyname="";
456_ausername = "IUSR_DEVE-SERVER";_auserpass ="IUSR_DEVE-SERVER";_name="";
457}
458/**////<summary>
459///定义属性,IISVirtualDir太多属性了
460///我只搞了比较重要的一些,其它的大伙需要的自个加吧。
461///</summary>
462
463/// <summary>
464/// 标志
465/// </summary>
466public int flag
467{
468get{ return _flag;}
469set{ _flag = value;}
470}
471/**//// <summary>
472/// 是否可读
473/// </summary>
474public bool AccessRead
475{
476get{ return _read;}
477set{ _read = value;}
478}
479/**//// <summary>
480/// 是否可写
481/// </summary>
482public bool AccessWrite
483{
484get{ return _write;}
485set{ _write = value;}
486}
487/**//// <summary>
488/// 是否可执行
489/// </summary>
490public bool AccessExecute
491{
492get{ return _execute;}
493set{ _execute = value;}
494}
495/**//// <summary>
496/// SSL验证
497/// </summary>
498public bool AccessSSL
499{
500get{ return _ssl;}
501set{ _ssl = value;}
502}
503/**//// <summary>
504/// 是否允许脚本
505/// </summary>
506public bool AccessScript
507{
508get{ return _script;}
509set{ _script = value;}
510}
511 public bool AuthBasic
512{
513get{ return _authbasic;}
514set{ _authbasic = value;}
515}
516public bool AuthNTLM
517{
518get{ return _authntlm;}
519set{ _authntlm = value;}
520}
521public bool ContentIndexed
522{
523get{ return _indexed;}
524set{ _indexed = value;}
525}
526/**//// <summary>
527/// 是否可浏览
528/// </summary>
529public bool EnableDirBrowsing
530{
531get{ return _endirbrow;}
532set{ _endirbrow = value;}
533}
534public bool EnableDefaultDoc
535{
536get{ return _endefaultdoc;}
537set{ _endefaultdoc = value;}
538}
539/**//// <summary>
540/// 虚拟目录的名字
541/// </summary>
542public string Name
543{
544get{ return _name;}
545set{ _name = value;}
546}
547/**//// <summary>
548/// 虚拟目录的物理地址
549/// </summary>
550public string Path
551{
552get{ return _path;}
553set{ _path = value;}
554}
555/**//// <summary>
556/// 默认访问首页
557/// </summary>
558public string DefaultDoc
559{
560get{ return _defaultdoc;}
561set{ _defaultdoc = value;}
562}
563/**//// <summary>
564/// 匿名用户名
565/// </summary>
566public string AnonymousUserName
567{
568get{ return _ausername;}
569set{ _ausername = value;}
570}
571/**//// <summary>
572/// 匿名用户密码
573/// </summary>
574public string AnonymousUserPass
575{
576get{ return _auserpass;}
577set{ _auserpass = value;}
578}
579/**//// <summary>
580/// 应用程序名称
581/// </summary>
582public string AppFriendlyName
583{
584get{ return _appfriendlyname;}
585set{ _appfriendlyname = value;}
586}
587}
588/**//// <summary>
589/// 集合VirtualDirectories
590/// </summary>
591
592public class VirtualDirectories : System.Collections.Hashtable
593{
594public VirtualDirectories()
595{
596}
597//添加新的方法
598public VirtualDirectory Find(string strName)
599{
600return (VirtualDirectory)this[strName];
601}
602}
603}
604
2 using System.Data;
3 using System.DirectoryServices;
4 using System.Collections;
5
6 namespace CreateWebDir
7 {
8/**//// <summary>
9/// IISManager 的摘要说明。
10/// </summary>
11public class IISManager
12{
13//定义需要使用的
14private string _server,_website,_AnonymousUserPass,_AnonymousUserName;
15private VirtualDirectories _virdirs;
16protected System.DirectoryServices.DirectoryEntry rootfolder;
17private bool _batchflag;
18/**//// <summary>
19/// 默认情况下使用localhost,即访问本地机
20/// </summary>
21public IISManager()
22{
23_server = "localhost";
24_website = "1";
25_batchflag = false;
26}
27/**//// <summary>
28///
29/// </summary>
30/// <param name="strServer">主机名称</param>
31public IISManager(string strServer)
32{
33_server = strServer;
34_website = "1";
35_batchflag = false;
36}
37/**//// <summary>
38/// 生成一个新的站点
39/// </summary>
40/// <param name="webSiteName">站点名称</param>
41/// <param name="pathToRoot">物理地址</param>
42/// <returns></returns>
43public int CreateWebSite(string webSiteName, string pathToRoot)
44{
45DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC");
46// Find unused ID value for new web site
47int siteID = 1;
48foreach(DirectoryEntry e in root.Children)
49{
50if(e.SchemaClassName == "IIsWebServer")
51{
52int ID = Convert.ToInt32(e.Name);
53if(ID >= siteID)
54{
55siteID = ID+1;
56}
57}
58}
59// Create web site
60DirectoryEntry site = (DirectoryEntry)root.Invoke("Create", "IIsWebServer", siteID);
61site.Invoke("Put", "ServerComment", webSiteName);
62site.Invoke("Put", "KeyType", "IIsWebServer");
63site.Invoke("Put", "ServerBindings", ":80:");
64site.Invoke("Put", "ServerState", 2);
65site.Invoke("Put", "FrontPageWeb", 1);
66site.Invoke("Put", "DefaultDoc", "Default.aspx");
67site.Invoke("Put", "SecureBindings", ":443:");
68site.Invoke("Put", "ServerAutoStart", 1);
69site.Invoke("Put", "ServerSize", 1);
70site.Invoke("SetInfo");
71// Create application virtual directory
72DirectoryEntry siteVDir = site.Children.Add("Root", "IISWebVirtualDir");
73siteVDir.Properties["AppIsolated"][0] = 2;
74siteVDir.Properties["Path"][0] = pathToRoot;
75siteVDir.Properties["AccessFlags"][0] = 513;
76siteVDir.Properties["FrontPageWeb"][0] = 1;
77siteVDir.Properties["AppRoot"][0] = "LM/W3SVC/"+siteID+"/Root";
78siteVDir.Properties["AppFriendlyName"][0] = "Root";
79siteVDir.CommitChanges();
80site.CommitChanges();
81return siteID;
82}
83
84 /**//// <summary>
85 /// 获得匿名用户
86 /// </summary>
87public void get_AnonymousUser()
88{
89_AnonymousUserPass="IUSR_DEVE-SERVER";
90_AnonymousUserName="IUSR_DEVE-SERVER";
91VirtualDirectory vDir;
92try
93{
94Hashtable myList = (Hashtable)_virdirs;
95IDictionaryEnumerator myEnumerator = myList.GetEnumerator();
96while ( myEnumerator.MoveNext() )
97{
98vDir = (VirtualDirectory)myEnumerator.Value;
99if (vDir.AnonymousUserName!="" && vDir.AnonymousUserPass != "")
100{
101_AnonymousUserName=vDir.AnonymousUserName;
102_AnonymousUserPass=vDir.AnonymousUserPass;
103break;
104}
105}
106}
107catch
108{
109_AnonymousUserPass="IUSR_DEVE-SERVER";
110_AnonymousUserName="IUSR_DEVE-SERVER";
111}
112}
113/**//// <summary>
114/// 匿名用户名
115/// </summary>
116public string AnonymousUserName
117{
118get{ return _AnonymousUserName;}
119set{ _AnonymousUserName = value;}
120}
121/**//// <summary>
122/// 匿名用户密码
123/// </summary>
124public string AnonymousUserPass
125{
126get{ return _AnonymousUserPass;}
127set{ _AnonymousUserPass = value;}
128}
129
130/**//// <summary>
131/// Server属性定义访问机器的名字,可以是IP与计算名
132/// </summary>
133public string Server
134{
135get{ return _server;}
136set{ _server = value;}
137}
138/**//// <summary>
139/// WebSite属性定义,为一数字,为方便,使用string
140/// 一般来说第一台主机为1,第二台主机为2,依次类推
141/// </summary>
142public string WebSite
143{
144get{ return _website; }
145set{ _website = value; }
146}
147
148/**//// <summary>
149/// 虚拟目录的名字
150/// </summary>
151public VirtualDirectories VirDirs
152{
153get{ return _virdirs; }
154set{ _virdirs = value;}
155}
156/**////<summary>
157///定义公共方法
158///</summary>
159
160
161/// <summary>
162/// 连接服务器
163/// </summary>
164public void Connect()
165{
166ConnectToServer();
167}
168
169/**//// <summary>
170/// 为方便重载
171/// </summary>
172public void Connect(string strServer)
173{
174_server = strServer;
175ConnectToServer();
176}
177
178/**//// <summary>
179/// 为方便重载
180/// </summary>
181/// <param name="strServer"></param>
182/// <param name="strWebSite"></param>
183public void Connect(string strServer,string strWebSite)
184{
185_server = strServer;
186_website = strWebSite;
187ConnectToServer();
188}
189/**//// <summary>
190/// 判断是否存这个虚拟目录
191/// </summary>
192/// <param name="strVirdir"></param>
193/// <returns></returns>
194public bool Exists(string strVirdir)
195{
196return _virdirs.Contains(strVirdir);
197}
198
199/**//// <summary>
200/// 添加一个虚拟目录
201/// </summary>
202/// <param name="newdir">虚拟目录的实例</param>
203/// <returns></returns>
204public bool Create(VirtualDirectory newdir)
205{
206string strPath = "IIS://" + _server + "/W3SVC/" + _website + "/ROOT/" + newdir.Name;
207if(!_virdirs.Contains(newdir.Name) || _batchflag )
208{
209try
210{
211//加入到ROOT的Children集合中去
212DirectoryEntry newVirDir = rootfolder.Children.Add(newdir.Name,"IIsWebVirtualDir");
213newVirDir.Invoke("AppCreate",true);
214newVirDir.CommitChanges();
215rootfolder.CommitChanges();
216//然后更新数据
217UpdateDirInfo(newVirDir,newdir);
218return true;
219}
220catch(Exception ee)
221{
222//throw new Exception(ee.ToString());
223return false;
224}
225}
226else
227{
228return true;
229//throw new Exception("This virtual directory is already exist.");
230}
231}
232
233/**//// <summary>
234/// 得到一个虚拟目录
235/// </summary>
236/// <param name="strVirdir"></param>
237/// <returns></returns>
238public VirtualDirectory GetVirDir(string strVirdir)
239{
240VirtualDirectory tmp = null;
241if(_virdirs.Contains(strVirdir))
242{
243tmp = _virdirs.Find(strVirdir);
244((VirtualDirectory)_virdirs[strVirdir]).flag = 2;
245}
246else
247{
248//throw new Exception("This virtual directory is not exists");
249}
250return tmp;
251}
252
253
254/**//// <summary>
255/// 更新一个虚拟目录
256/// </summary>
257/// <param name="dir"></param>
258public void Update(VirtualDirectory dir)
259{
260//判断需要更改的虚拟目录是否存在
261if(_virdirs.Contains(dir.Name))
262{
263DirectoryEntry ode = rootfolder.Children.Find(dir.Name,"IIsWebVirtualDir");
264UpdateDirInfo(ode,dir);
265}
266else
267{
268//throw new Exception("This virtual directory is not exists.");
269}
270}
271
272
273/**//// <summary>
274/// 删除一个虚拟目录
275/// </summary>
276/// <param name="strVirdir"></param>
277public void Delete(string strVirdir)
278{
279if(_virdirs.Contains(strVirdir))
280{
281object[] paras = new object[2];
282paras[0] = "IIsWebVirtualDir"; //表示操作的是虚拟目录
283paras[1] = strVirdir;
284rootfolder.Invoke("Delete",paras);
285rootfolder.CommitChanges();
286}
287else
288{
289//throw new Exception("Can''t delete " + strVirdir + ",because it isn''t exists.");
290}
291}
292
293/**//// <summary>
294/// 批量更新
295/// </summary>
296public void UpdateBatch()
297{
298BatchUpdate(_virdirs);
299}
300//重载一个:-)
301public void UpdateBatch(VirtualDirectories vds)
302{
303BatchUpdate(vds);
304}
305
306/**////<summary>
307///私有方法
308///</summary>
309
310public void Close()
311{
312_virdirs.Clear();
313_virdirs = null;
314rootfolder.Dispose();
315
316}
317
318/**//// <summary>
319/// 连接服务器
320/// </summary>
321private void ConnectToServer()
322{
323string strPath = "IIS://" + _server + "/W3SVC/" + _website +"/ROOT";
324try
325{
326this.rootfolder = new DirectoryEntry(strPath);
327_virdirs = GetVirDirs(this.rootfolder.Children);
328}
329catch(Exception e)
330{
331//throw new Exception("Can''t connect to the server ["+ _server +"] ",e);
332}
333}
334//执行批量更新
335private void BatchUpdate(VirtualDirectories vds)
336{
337_batchflag = true;
338foreach(object item in vds.Values)
339{
340VirtualDirectory vd = (VirtualDirectory)item;
341switch(vd.flag)
342{
343case 0:
344break;
345case 1:
346Create(vd);
347break;
348case 2:
349Update(vd);
350break;
351}
352}
353_batchflag = false;
354}
355//更新东东
356private void UpdateDirInfo(DirectoryEntry de,VirtualDirectory vd)
357{
358de.Properties["AnonymousUserName"][0] = vd.AnonymousUserName;
359de.Properties["AnonymousUserPass"][0] = vd.AnonymousUserPass;
360de.Properties["AccessRead"][0] = vd.AccessRead;
361de.Properties["AccessExecute"][0] = vd.AccessExecute;
362de.Properties["AccessWrite"][0] = vd.AccessWrite;
363de.Properties["AuthBasic"][0] = vd.AuthBasic;
364de.Properties["AuthNTLM"][0] = vd.AuthNTLM;
365de.Properties["ContentIndexed"][0] = vd.ContentIndexed;
366de.Properties["EnableDefaultDoc"][0] = vd.EnableDefaultDoc;
367de.Properties["EnableDirBrowsing"][0] = vd.EnableDirBrowsing;
368de.Properties["AccessSSL"][0] = vd.AccessSSL;
369de.Properties["AccessScript"][0] = vd.AccessScript;
370de.Properties["DefaultDoc"][0] = vd.DefaultDoc;
371de.Properties["Path"][0] = vd.Path;
372de.Properties["AppFriendlyName"][0] = vd.AppFriendlyName;
373de.CommitChanges();
374}
375
376//获取虚拟目录集合
377private VirtualDirectories GetVirDirs(DirectoryEntries des)
378{
379VirtualDirectories tmpdirs = new VirtualDirectories();
380foreach(DirectoryEntry de in des)
381{
382if(de.SchemaClassName == "IIsWebVirtualDir")
383{
384VirtualDirectory vd = new VirtualDirectory();
385vd.Name = de.Name;
386vd.AccessRead = (bool)de.Properties["AccessRead"][0];
387vd.AccessExecute = (bool)de.Properties["AccessExecute"][0];
388vd.AccessWrite = (bool)de.Properties["AccessWrite"][0];
389vd.AnonymousUserName = (string)de.Properties["AnonymousUserName"][0];
390vd.AnonymousUserPass = (string)de.Properties["AnonymousUserName"][0];
391vd.AuthBasic = (bool)de.Properties["AuthBasic"][0];
392vd.AuthNTLM = (bool)de.Properties["AuthNTLM"][0];
393vd.ContentIndexed = (bool)de.Properties["ContentIndexed"][0];
394vd.EnableDefaultDoc = (bool)de.Properties["EnableDefaultDoc"][0];
395vd.EnableDirBrowsing = (bool)de.Properties["EnableDirBrowsing"][0];
396vd.AccessSSL = (bool)de.Properties["AccessSSL"][0];
397vd.AccessScript = (bool)de.Properties["AccessScript"][0];
398vd.Path = (string)de.Properties["Path"][0];
399vd.flag = 0;
400vd.AppFriendlyName=(string)de.Properties["AppFriendlyName"][0];
401vd.DefaultDoc = (string)de.Properties["DefaultDoc"][0];
402tmpdirs.Add(vd.Name,vd);
403}
404}
405return tmpdirs;
406}
407
408}
409/**//// <summary>
410/// VirtualDirectory类
411/// </summary>
412public class VirtualDirectory
413{
414private bool _read,_execute,_script,_ssl,_write,_authbasic,_authntlm, _indexed,_endirbrow,_endefaultdoc;
415private string _ausername,_auserpass,_name,_path,_appfriendlyname;
416private int _flag;
417private string _defaultdoc;
418/**//// <summary>
419/// 构造函数
420/// </summary>
421public VirtualDirectory()
422{
423SetValue();
424}
425/**//// <summary>
426/// 构造函数
427/// </summary>
428/// <param name="sVirDirName">虚拟目录的名字</param>
429public VirtualDirectory(string sVirDirName)
430{
431SetValue();
432_name = sVirDirName;
433}
434/**//// <summary>
435/// 构造函数
436/// </summary>
437/// <param name="sVirDirName">虚拟路径</param>
438/// <param name="strPhyPath">物理路径</param>
439/// <param name="AnonymousUser">匿名用户名和密码</param>
440public VirtualDirectory(string sVirDirName,string strPhyPath,string[] AnonymousUser)
441{
442SetValue();
443_name = sVirDirName;
444_path = strPhyPath;
445_ausername = AnonymousUser[0];
446_auserpass = AnonymousUser[1];
447}
448private void SetValue()
449{
450_read = true;_execute = false;_script = true;_ssl= false;_write=false;_authbasic=false;
451_authntlm=true;_indexed = true;_endirbrow=false;_endefaultdoc = true;
452_flag = 1;
453_defaultdoc = "default.htm,default.aspx,default.asp,index.htm";
454_path = "C://";
455_appfriendlyname="";
456_ausername = "IUSR_DEVE-SERVER";_auserpass ="IUSR_DEVE-SERVER";_name="";
457}
458/**////<summary>
459///定义属性,IISVirtualDir太多属性了
460///我只搞了比较重要的一些,其它的大伙需要的自个加吧。
461///</summary>
462
463/// <summary>
464/// 标志
465/// </summary>
466public int flag
467{
468get{ return _flag;}
469set{ _flag = value;}
470}
471/**//// <summary>
472/// 是否可读
473/// </summary>
474public bool AccessRead
475{
476get{ return _read;}
477set{ _read = value;}
478}
479/**//// <summary>
480/// 是否可写
481/// </summary>
482public bool AccessWrite
483{
484get{ return _write;}
485set{ _write = value;}
486}
487/**//// <summary>
488/// 是否可执行
489/// </summary>
490public bool AccessExecute
491{
492get{ return _execute;}
493set{ _execute = value;}
494}
495/**//// <summary>
496/// SSL验证
497/// </summary>
498public bool AccessSSL
499{
500get{ return _ssl;}
501set{ _ssl = value;}
502}
503/**//// <summary>
504/// 是否允许脚本
505/// </summary>
506public bool AccessScript
507{
508get{ return _script;}
509set{ _script = value;}
510}
511 public bool AuthBasic
512{
513get{ return _authbasic;}
514set{ _authbasic = value;}
515}
516public bool AuthNTLM
517{
518get{ return _authntlm;}
519set{ _authntlm = value;}
520}
521public bool ContentIndexed
522{
523get{ return _indexed;}
524set{ _indexed = value;}
525}
526/**//// <summary>
527/// 是否可浏览
528/// </summary>
529public bool EnableDirBrowsing
530{
531get{ return _endirbrow;}
532set{ _endirbrow = value;}
533}
534public bool EnableDefaultDoc
535{
536get{ return _endefaultdoc;}
537set{ _endefaultdoc = value;}
538}
539/**//// <summary>
540/// 虚拟目录的名字
541/// </summary>
542public string Name
543{
544get{ return _name;}
545set{ _name = value;}
546}
547/**//// <summary>
548/// 虚拟目录的物理地址
549/// </summary>
550public string Path
551{
552get{ return _path;}
553set{ _path = value;}
554}
555/**//// <summary>
556/// 默认访问首页
557/// </summary>
558public string DefaultDoc
559{
560get{ return _defaultdoc;}
561set{ _defaultdoc = value;}
562}
563/**//// <summary>
564/// 匿名用户名
565/// </summary>
566public string AnonymousUserName
567{
568get{ return _ausername;}
569set{ _ausername = value;}
570}
571/**//// <summary>
572/// 匿名用户密码
573/// </summary>
574public string AnonymousUserPass
575{
576get{ return _auserpass;}
577set{ _auserpass = value;}
578}
579/**//// <summary>
580/// 应用程序名称
581/// </summary>
582public string AppFriendlyName
583{
584get{ return _appfriendlyname;}
585set{ _appfriendlyname = value;}
586}
587}
588/**//// <summary>
589/// 集合VirtualDirectories
590/// </summary>
591
592public class VirtualDirectories : System.Collections.Hashtable
593{
594public VirtualDirectories()
595{
596}
597//添加新的方法
598public VirtualDirectory Find(string strName)
599{
600return (VirtualDirectory)this[strName];
601}
602}
603}
604
使用举例:
string sServer = / " localhost/ " ;
string VirtualDir = / " vTest/ " ; // 虚拟目录
string PathDir = @/ " c://inetpub//dlwang/// " ; // 物理目录
IISManager iisMg = new IISManager(sServer);
iisMg.Connect();
if (iisMg.Exists(VirtualDir))
{
throw new Exception(VirtualDir /" is exist!/");
}
else
{
VirtualDirectory newVirDir = new VirtualDirectory(VirtualDir);
newVirDir.Path=PathDir;
newVirDir.DefaultDoc=/"Index.htm/";
newVirDir.AccessExecute=true;
newVirDir.AccessScript=true;
newVirDir.AccessWrite=false;
newVirDir.AppFriendlyName=/"vTestApp/";
if (!iisMg.Create(newVirDir))
throw new Exception(VirtualDir /" 创建不成功!/");
}
iisMg.Close();
string sServer = / " localhost/ " ;
string VirtualDir = / " vTest/ " ; // 虚拟目录
string PathDir = @/ " c://inetpub//dlwang/// " ; // 物理目录
IISManager iisMg = new IISManager(sServer);
iisMg.Connect();
if (iisMg.Exists(VirtualDir))
{
throw new Exception(VirtualDir /" is exist!/");
}
else
{
VirtualDirectory newVirDir = new VirtualDirectory(VirtualDir);
newVirDir.Path=PathDir;
newVirDir.DefaultDoc=/"Index.htm/";
newVirDir.AccessExecute=true;
newVirDir.AccessScript=true;
newVirDir.AccessWrite=false;
newVirDir.AppFriendlyName=/"vTestApp/";
if (!iisMg.Create(newVirDir))
throw new Exception(VirtualDir /" 创建不成功!/");
}
iisMg.Close();