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
使用举例:
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();
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();

本文介绍了一个用于管理和创建IIS虚拟目录的.NET类库。该类库提供了创建新站点、虚拟目录,以及设置各种配置选项的功能。通过示例代码展示了如何使用此库来创建虚拟目录。

154

被折叠的 条评论
为什么被折叠?



