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![]()

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




























