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();

2

3

4

5

6

7



8


9

10

11

12



13

14

15

16

17

18


19

20

21

22



23

24

25

26

27


28

29

30

31

32



33

34

35

36

37


38

39

40

41

42

43

44



45

46

47

48

49



50

51



52

53

54



55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84


85

86

87

88



89

90

91

92

93



94

95

96

97



98

99

100



101

102

103

104

105

106

107

108



109

110

111

112

113


114

115

116

117



118



119



120

121


122

123

124

125



126



127



128

129

130


131

132

133

134



135



136



137

138


139

140

141

142

143



144



145



146

147

148


149

150

151

152



153



154



155

156


157

158

159

160

161

162

163

164

165



166

167

168

169


170

171

172

173



174

175

176

177

178


179

180

181

182

183

184



185

186

187

188

189


190

191

192

193

194

195



196

197

198

199


200

201

202

203

204

205



206

207

208



209

210



211

212

213

214

215

216

217

218

219

220

221



222

223

224

225

226

227



228

229

230

231

232

233


234

235

236

237

238

239



240

241

242



243

244

245

246

247



248

249

250

251

252

253

254


255

256

257

258

259



260

261

262



263

264

265

266

267



268

269

270

271

272

273


274

275

276

277

278



279

280



281

282

283

284

285

286

287

288



289

290

291

292

293


294

295

296

297



298

299

300

301

302



303

304

305

306


307

308

309

310

311



312

313

314

315

316

317

318


319

320

321

322



323

324

325



326

327

328

329

330



331


332

333

334

335

336



337

338

339



340

341

342



343

344

345

346

347

348

349

350

351

352

353

354

355

356

357



358

359

360

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378



379

380

381



382

383



384

385

386

387

388

389

390

391

392

393

394

395

396

397

398

399

400

401

402

403

404

405

406

407

408

409


410

411

412

413



414

415

416

417

418


419

420

421

422



423

424

425


426

427

428

429

430



431

432

433

434


435

436

437

438

439

440

441



442

443

444

445

446

447

448

449



450

451

452

453

454

455

456

457

458


459

460

461

462

463

464

465

466

467



468



469



470

471


472

473

474

475



476



477



478

479


480

481

482

483



484



485



486

487


488

489

490

491



492



493



494

495


496

497

498

499



500



501



502

503


504

505

506

507



508



509



510

511

512



513



514



515

516

517



518



519



520

521

522



523



524



525

526


527

528

529

530



531



532



533

534

535



536



537



538

539


540

541

542

543



544



545



546

547


548

549

550

551



552



553



554

555


556

557

558

559



560



561



562

563


564

565

566

567



568



569



570

571


572

573

574

575



576



577



578

579


580

581

582

583



584



585



586

587

588


589

590

591

592

593



594

595



596

597

598

599



600

601

602

603

604






























