1、通过调用iisvdir.vbs,
2、通过System.DirectoryServices.DirectoryEntry。
如果看官有其他的方法,欢迎讨论chwkai@gmail.com。
为了方便描述,我写了两个虚拟目录操作类,简单的封装了iisvdir.vbs和System.DirectoryServices.DirectoryEntry管理虚拟目录的方法,结构如下所示:
Server为iis服务器的ip或机器名,User和Password为该服务器的管理员用户名和密码,Alias为虚拟目录的名称,VirtualRoot为虚拟目录所在根目录的名称(如下图),PhysicalPath为该虚拟目录相应的物理路径。如果想进一步了解IIS虚拟目录的属性,可以参考MSDNIIsWebVirtualDir。
通过调用iisvdir.vbs创建虚拟目录
看官可以参考一下MSDN的相关资料:
Creating Web Virtual Directories Using Iisvdir.vbs
Deleting Web Virtual Directories Using Iisvdir.vbs
Listing Web Virtual Directories Using Iisvdir.vbs .
仔细看还会发现, IIS管理器也是通过调用iisvdir.vbs来实现虚拟目录的创建和删除的。我们可以通过命令行的方式来执行iisvdir.vbs脚本
1)创建虚拟目录:
cscriptc:windowssystem32iisvdir.vbs[/sserver][/uusername/ppassword]/create [virtualRoot]AliasPhysicalPath
2)删除虚拟目录:
1cscriptc:windowssystem32iisvdir.vbs[/sserver][/uusername/ppassword]/delete[virtualRoot]/Alias
3)查看指定虚拟目录下的全部子目录:
1cscriptc:windowssystem32iisvdir.vbs[/sserver][/uusername/ppassword]/queryvirtualRoot
通过封装这三个操作,可以实现iis虚拟目录的创建、删除和判断是否存在:
1)创建虚拟目录:
1///<summary>
2 ///创建iis虚拟目录
3 ///</summary>
4 ///<exceptioncref="CreateIIsDirectory.DirectoryException">虚拟目录操作异常</exception>
5 publicoverridevoidCreateDirectory()
6 {
7 //已不覆盖的方式创建虚拟目录,当虚拟目录存在时抛出异常
8 this.CreateDirectory(false);
9 }
10
11 ///<summary>
12 ///创建iis虚拟目录
13 ///</summary>
14 ///<paramname="bReplace">是否覆盖掉原有的虚拟目录</param>
15 ///<exceptioncref="CreateIIsDirectory.DirectoryException">虚拟目录操作异常</exception>
16 publicoverridevoidCreateDirectory(boolbReplace)
17 {
18 //判断目录是否存在
19 if(this.Exist())
20 {
21 if(bReplace)
22 {
23 //若允许覆盖则先删除原有的虚拟目录
24 this.DeleteDirectory();
25 }
26 else
27 {
28 //若不允许覆盖直接抛出目录已存在的异常
29 DirectoryException.Throw("directoryalreadyexist");
30 }
31 }
32
33 ReturnMessagemessage=ScriptDirectory.ExecuteScript(
34 this,ScriptDirectory.CONST_ACTION_CREATE);
35
36 //输出message信息供nunit查看
37 Console.WriteLine("returncode:"+message.Code);
38 Console.WriteLine("returnmessage:n"+message.Message);
39
40 //若创建失败抛出虚拟目录操作异常
41 if(message.Code!=0)
42 {
43 DirectoryException.Throw(message.Message);
44 }
45 }
2)删除虚拟目录:
1///<summary>
2 ///删除iis虚拟目录
3 ///</summary>
4 ///<exceptioncref="CreateIIsDirectory.DirectoryException">虚拟目录操作异常</exception>
5 publicoverridevoidDeleteDirectory()
6 {
7 ReturnMessagemessage=ScriptDirectory.ExecuteScript(
8 this,ScriptDirectory.CONST_ACTION_DELETE);
9
10 //输出message信息供nunit查看
11 Console.WriteLine("returncode:"+message.Code);
12 Console.WriteLine("returnmessage:n"+message.Message);
13
14 //若删除失败抛出虚拟目录操作异常
15 if(message.Code!=0)
16 {
17 DirectoryException.Throw(message.Message);
18 }
19 }
3) 判断虚拟目录是否存在:
1///<summary>
2 ///判断iis虚拟目录是否存在
3 ///</summary>
4 ///<returns>目录是否存在</returns>
5 publicoverrideboolExist()
6 {
7 ReturnMessagemessage=ScriptDirectory.ExecuteScript(
8 this,ScriptDirectory.CONST_ACTION_QUERY);
9 boolbExist=false;
10
11 //输出message信息供nunit查看
12 Console.WriteLine("returncode:"+message.Code);
13 Console.WriteLine("returnmessage:n"+message.Message);
14
15 //从返回字符串中判断该虚拟目录是否存在
16 if(message.Code==0)
17 {
18 Regexreg=newRegex("/"+this.m_strAlias+@"s+");
19 message.Message=message.Message.Substring(
20 message.Message.IndexOf("/"));
21
22 bExist=reg.IsMatch(message.Message);
23 }
24
25 returnbExist;
26 }
ScriptDirectory.ExecuteScript函数封装了iisvdir.vbs的调用和参数的组合,代码比较长,大家可以在/Files/chwkai/CreateIIsDirectory.rar下载到本文所讨论的代码。
orz,明天还有场球赛,睡觉了。下次的文章将继续写到,如何用System.DirectoryServices.DirectoryEntry来创建IIS虚拟目录,相对于iisvdir.vbs,这种方式更加灵活,并且具有更多的功能,如设定虚拟目录属性等
本文作者:未知