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

6
namespace CreateWebDir7
{8
/// <summary>9
/// IISManager 的摘要说明。10
/// </summary>11
public class IISManager12
{13
//定义需要使用的14
private string _server,_website,_AnonymousUserPass,_AnonymousUserName;15
private VirtualDirectories _virdirs;16
protected System.DirectoryServices.DirectoryEntry rootfolder;17
private bool _batchflag;18
/// <summary>19
/// 默认情况下使用localhost,即访问本地机20
/// </summary>21
public IISManager()22
{23
_server = "localhost";24
_website = "1";25
_batchflag = false;26
}27
/// <summary>28
/// 29
/// </summary>30
/// <param name="strServer">主机名称</param>31
public 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>43
public int CreateWebSite(string webSiteName, string pathToRoot)44
{45
DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC");46
// Find unused ID value for new web site47
int siteID = 1;48
foreach(DirectoryEntry e in root.Children)49
{50
if(e.SchemaClassName == "IIsWebServer")51
{52
int ID = Convert.ToInt32(e.Name);53
if(ID >= siteID)54
{55
siteID = ID+1;56
}57
}58
}59
// Create web site60
DirectoryEntry site = (DirectoryEntry)root.Invoke("Create", "IIsWebServer", siteID);61
site.Invoke("Put", "ServerComment", webSiteName);62
site.Invoke("Put", "KeyType", "IIsWebServer");63
site.Invoke("Put", "ServerBindings", ":80:");64
site.Invoke("Put", "ServerState", 2);65
site.Invoke("Put", "FrontPageWeb", 1);66
site.Invoke("Put", "DefaultDoc", "Default.aspx");67
site.Invoke("Put", "SecureBindings", ":443:");68
site.Invoke("Put", "ServerAutoStart", 1);69
site.Invoke("Put", "ServerSize", 1);70
site.Invoke("SetInfo");71
// Create application virtual directory72
DirectoryEntry siteVDir = site.Children.Add("Root", "IISWebVirtualDir");73
siteVDir.Properties["AppIsolated"][0] = 2;74
siteVDir.Properties["Path"][0] = pathToRoot;75
siteVDir.Properties["AccessFlags"][0] = 513;76
siteVDir.Properties["FrontPageWeb"][0] = 1;77
siteVDir.Properties["AppRoot"][0] = "LM/W3SVC/"+siteID+"/Root";78
siteVDir.Properties["AppFriendlyName"][0] = "Root";79
siteVDir.CommitChanges();80
site.CommitChanges();81
return siteID;82
}83

84
/// <summary>85
/// 获得匿名用户86
/// </summary>87
public void get_AnonymousUser()88
{89
_AnonymousUserPass="IUSR_DEVE-SERVER"; 90
_AnonymousUserName="IUSR_DEVE-SERVER";91
VirtualDirectory vDir;92
try93
{94
Hashtable myList = (Hashtable)_virdirs;95
IDictionaryEnumerator myEnumerator = myList.GetEnumerator();96
while ( myEnumerator.MoveNext() )97
{98
vDir = (VirtualDirectory)myEnumerator.Value;99
if (vDir.AnonymousUserName!="" && vDir.AnonymousUserPass != "")100
{101
_AnonymousUserName=vDir.AnonymousUserName;102
_AnonymousUserPass=vDir.AnonymousUserPass;103
break;104
}105
}106
}107
catch108
{109
_AnonymousUserPass="IUSR_DEVE-SERVER"; 110
_AnonymousUserName="IUSR_DEVE-SERVER";111
}112
}113
/// <summary>114
/// 匿名用户名115
/// </summary>116
public string AnonymousUserName117
{118
get{ return _AnonymousUserName;}119
set{ _AnonymousUserName = value;}120
}121
/// <summary>122
/// 匿名用户密码123
/// </summary>124
public string AnonymousUserPass125
{126
get{ return _AnonymousUserPass;}127
set{ _AnonymousUserPass = value;}128
}129

130
/// <summary>131
/// Server属性定义访问机器的名字,可以是IP与计算名132
/// </summary>133
public string Server134
{135
get{ return _server;}136
set{ _server = value;}137
}138
/// <summary>139
/// WebSite属性定义,为一数字,为方便,使用string 140
/// 一般来说第一台主机为1,第二台主机为2,依次类推141
/// </summary>142
public string WebSite143
{144
get{ return _website; }145
set{ _website = value; }146
}147

148
/// <summary>149
/// 虚拟目录的名字150
/// </summary>151
public VirtualDirectories VirDirs152
{153
get{ return _virdirs; }154
set{ _virdirs = value;}155
}156
///<summary>157
///定义公共方法158
///</summary>159

160

161
/// <summary>162
/// 连接服务器163
/// </summary>164
public void Connect()165
{166
ConnectToServer();167
}168

169
/// <summary>170
/// 为方便重载171
/// </summary>172
public void Connect(string strServer)173
{174
_server = strServer;175
ConnectToServer();176
}177

178
/// <summary>179
/// 为方便重载180
/// </summary>181
/// <param name="strServer"></param>182
/// <param name="strWebSite"></param>183
public void Connect(string strServer,string strWebSite)184
{185
_server = strServer;186
_website = strWebSite;187
ConnectToServer();188
}189
/// <summary>190
/// 判断是否存这个虚拟目录191
/// </summary>192
/// <param name="strVirdir"></param>193
/// <returns></returns>194
public bool Exists(string strVirdir)195
{196
return _virdirs.Contains(strVirdir);197
}198

199
/// <summary>200
/// 添加一个虚拟目录201
/// </summary>202
/// <param name="newdir">虚拟目录的实例</param>203
/// <returns></returns>204
public bool Create(VirtualDirectory newdir) 205
{206
string strPath = "IIS://" + _server + "/W3SVC/" + _website + "/ROOT/" + newdir.Name;207
if(!_virdirs.Contains(newdir.Name) || _batchflag )208
{209
try210
{211
//加入到ROOT的Children集合中去212
DirectoryEntry newVirDir = rootfolder.Children.Add(newdir.Name,"IIsWebVirtualDir");213
newVirDir.Invoke("AppCreate",true);214
newVirDir.CommitChanges();215
rootfolder.CommitChanges();216
//然后更新数据217
UpdateDirInfo(newVirDir,newdir);218
return true;219
}220
catch(Exception ee)221
{222
//throw new Exception(ee.ToString());223
return false;224
}225
}226
else227
{228
return 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>238
public VirtualDirectory GetVirDir(string strVirdir)239
{240
VirtualDirectory tmp = null;241
if(_virdirs.Contains(strVirdir))242
{243
tmp = _virdirs.Find(strVirdir);244
((VirtualDirectory)_virdirs[strVirdir]).flag = 2;245
}246
else247
{248
//throw new Exception("This virtual directory is not exists");249
}250
return tmp;251
}252

253

254
/// <summary>255
/// 更新一个虚拟目录256
/// </summary>257
/// <param name="dir"></param>258
public void Update(VirtualDirectory dir)259
{260
//判断需要更改的虚拟目录是否存在261
if(_virdirs.Contains(dir.Name))262
{263
DirectoryEntry ode = rootfolder.Children.Find(dir.Name,"IIsWebVirtualDir");264
UpdateDirInfo(ode,dir);265
}266
else267
{268
//throw new Exception("This virtual directory is not exists.");269
}270
}271
272

273
/// <summary>274
/// 删除一个虚拟目录275
/// </summary>276
/// <param name="strVirdir"></param>277
public void Delete(string strVirdir)278
{279
if(_virdirs.Contains(strVirdir))280
{281
object[] paras = new object[2];282
paras[0] = "IIsWebVirtualDir"; //表示操作的是虚拟目录283
paras[1] = strVirdir;284
rootfolder.Invoke("Delete",paras);285
rootfolder.CommitChanges();286
}287
else288
{289
//throw new Exception("Can''t delete " + strVirdir + ",because it isn''t exists.");290
}291
}292

293
/// <summary>294
/// 批量更新295
/// </summary>296
public void UpdateBatch()297
{298
BatchUpdate(_virdirs);299
}300
//重载一个:-)301
public void UpdateBatch(VirtualDirectories vds)302
{303
BatchUpdate(vds);304
}305
306
///<summary>307
///私有方法308
///</summary>309

310
public void Close()311
{312
_virdirs.Clear();313
_virdirs = null;314
rootfolder.Dispose();315

316
}317

318
/// <summary>319
/// 连接服务器320
/// </summary>321
private void ConnectToServer()322
{323
string strPath = "IIS://" + _server + "/W3SVC/" + _website +"/ROOT";324
try325
{326
this.rootfolder = new DirectoryEntry(strPath);327
_virdirs = GetVirDirs(this.rootfolder.Children);328
} 329
catch(Exception e)330
{331
//throw new Exception("Can''t connect to the server ["+ _server +"]
",e);332
}333
}334
//执行批量更新335
private void BatchUpdate(VirtualDirectories vds)336
{337
_batchflag = true;338
foreach(object item in vds.Values)339
{340
VirtualDirectory vd = (VirtualDirectory)item;341
switch(vd.flag)342
{343
case 0:344
break;345
case 1:346
Create(vd);347
break;348
case 2:349
Update(vd);350
break;351
}352
}353
_batchflag = false;354
}355
//更新东东356
private void UpdateDirInfo(DirectoryEntry de,VirtualDirectory vd)357
{358
de.Properties["AnonymousUserName"][0] = vd.AnonymousUserName;359
de.Properties["AnonymousUserPass"][0] = vd.AnonymousUserPass;360
de.Properties["AccessRead"][0] = vd.AccessRead;361
de.Properties["AccessExecute"][0] = vd.AccessExecute;362
de.Properties["AccessWrite"][0] = vd.AccessWrite;363
de.Properties["AuthBasic"][0] = vd.AuthBasic;364
de.Properties["AuthNTLM"][0] = vd.AuthNTLM;365
de.Properties["ContentIndexed"][0] = vd.ContentIndexed;366
de.Properties["EnableDefaultDoc"][0] = vd.EnableDefaultDoc;367
de.Properties["EnableDirBrowsing"][0] = vd.EnableDirBrowsing;368
de.Properties["AccessSSL"][0] = vd.AccessSSL;369
de.Properties["AccessScript"][0] = vd.AccessScript;370
de.Properties["DefaultDoc"][0] = vd.DefaultDoc;371
de.Properties["Path"][0] = vd.Path;372
de.Properties["AppFriendlyName"][0] = vd.AppFriendlyName;373
de.CommitChanges();374
}375

376
//获取虚拟目录集合377
private VirtualDirectories GetVirDirs(DirectoryEntries des)378
{379
VirtualDirectories tmpdirs = new VirtualDirectories();380
foreach(DirectoryEntry de in des)381
{382
if(de.SchemaClassName == "IIsWebVirtualDir")383
{384
VirtualDirectory vd = new VirtualDirectory();385
vd.Name = de.Name;386
vd.AccessRead = (bool)de.Properties["AccessRead"][0];387
vd.AccessExecute = (bool)de.Properties["AccessExecute"][0];388
vd.AccessWrite = (bool)de.Properties["AccessWrite"][0];389
vd.AnonymousUserName = (string)de.Properties["AnonymousUserName"][0];390
vd.AnonymousUserPass = (string)de.Properties["AnonymousUserName"][0];391
vd.AuthBasic = (bool)de.Properties["AuthBasic"][0];392
vd.AuthNTLM = (bool)de.Properties["AuthNTLM"][0];393
vd.ContentIndexed = (bool)de.Properties["ContentIndexed"][0];394
vd.EnableDefaultDoc = (bool)de.Properties["EnableDefaultDoc"][0];395
vd.EnableDirBrowsing = (bool)de.Properties["EnableDirBrowsing"][0];396
vd.AccessSSL = (bool)de.Properties["AccessSSL"][0];397
vd.AccessScript = (bool)de.Properties["AccessScript"][0];398
vd.Path = (string)de.Properties["Path"][0];399
vd.flag = 0;400
vd.AppFriendlyName=(string)de.Properties["AppFriendlyName"][0];401
vd.DefaultDoc = (string)de.Properties["DefaultDoc"][0];402
tmpdirs.Add(vd.Name,vd);403
}404
}405
return tmpdirs;406
}407

408
}409
/// <summary>410
/// VirtualDirectory类411
/// </summary>412
public class VirtualDirectory413
{414
private bool _read,_execute,_script,_ssl,_write,_authbasic,_authntlm, _indexed,_endirbrow,_endefaultdoc;415
private string _ausername,_auserpass,_name,_path,_appfriendlyname;416
private int _flag;417
private string _defaultdoc;418
/// <summary>419
/// 构造函数420
/// </summary>421
public VirtualDirectory()422
{423
SetValue();424
}425
/// <summary>426
/// 构造函数427
/// </summary>428
/// <param name="sVirDirName">虚拟目录的名字</param>429
public VirtualDirectory(string sVirDirName)430
{431
SetValue();432
_name = sVirDirName;433
}434
/// <summary>435
/// 构造函数436
/// </summary>437
/// <param name="sVirDirName">虚拟路径</param>438
/// <param name="strPhyPath">物理路径</param>439
/// <param name="AnonymousUser">匿名用户名和密码</param>440
public VirtualDirectory(string sVirDirName,string strPhyPath,string[] AnonymousUser)441
{442
SetValue();443
_name = sVirDirName;444
_path = strPhyPath;445
_ausername = AnonymousUser[0];446
_auserpass = AnonymousUser[1];447
}448
private 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>466
public int flag467
{468
get{ return _flag;}469
set{ _flag = value;}470
}471
/// <summary>472
/// 是否可读473
/// </summary>474
public bool AccessRead475
{476
get{ return _read;}477
set{ _read = value;}478
}479
/// <summary>480
/// 是否可写481
/// </summary>482
public bool AccessWrite483
{484
get{ return _write;}485
set{ _write = value;}486
}487
/// <summary>488
/// 是否可执行489
/// </summary>490
public bool AccessExecute491
{492
get{ return _execute;}493
set{ _execute = value;}494
}495
/// <summary>496
/// SSL验证497
/// </summary>498
public bool AccessSSL499
{500
get{ return _ssl;}501
set{ _ssl = value;}502
}503
/// <summary>504
/// 是否允许脚本505
/// </summary>506
public bool AccessScript507
{508
get{ return _script;}509
set{ _script = value;}510
}511
public bool AuthBasic512
{513
get{ return _authbasic;}514
set{ _authbasic = value;}515
}516
public bool AuthNTLM517
{518
get{ return _authntlm;}519
set{ _authntlm = value;}520
}521
public bool ContentIndexed522
{523
get{ return _indexed;}524
set{ _indexed = value;}525
}526
/// <summary>527
/// 是否可浏览528
/// </summary>529
public bool EnableDirBrowsing530
{531
get{ return _endirbrow;}532
set{ _endirbrow = value;}533
}534
public bool EnableDefaultDoc535
{536
get{ return _endefaultdoc;}537
set{ _endefaultdoc = value;}538
}539
/// <summary>540
/// 虚拟目录的名字541
/// </summary>542
public string Name543
{544
get{ return _name;}545
set{ _name = value;}546
}547
/// <summary>548
/// 虚拟目录的物理地址549
/// </summary>550
public string Path551
{552
get{ return _path;}553
set{ _path = value;}554
}555
/// <summary>556
/// 默认访问首页557
/// </summary>558
public string DefaultDoc559
{560
get{ return _defaultdoc;}561
set{ _defaultdoc = value;}562
}563
/// <summary>564
/// 匿名用户名565
/// </summary>566
public string AnonymousUserName567
{568
get{ return _ausername;}569
set{ _ausername = value;}570
}571
/// <summary>572
/// 匿名用户密码573
/// </summary>574
public string AnonymousUserPass575
{576
get{ return _auserpass;}577
set{ _auserpass = value;}578
}579
/// <summary>580
/// 应用程序名称581
/// </summary>582
public string AppFriendlyName583
{584
get{ return _appfriendlyname;}585
set{ _appfriendlyname = value;}586
}587
}588
/// <summary>589
/// 集合VirtualDirectories590
/// </summary>591

592
public class VirtualDirectories : System.Collections.Hashtable593
{594
public VirtualDirectories()595
{596
}597
//添加新的方法 598
public VirtualDirectory Find(string strName)599
{600
return (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();



浙公网安备 33010602011771号