Asp.net网站的ClickOnce自动部署(2)-虚拟目录的配置


第一步先讲虚拟目录的配置,虚拟目录的配置简单来说就是创建虚拟目录。用手工的方式实现非常简单,直接设定“Web sharing”就可以了,让我们看看怎么通过编程的方式实现,本文将介绍两种创建虚拟目录的方法:

  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,这种方式更加灵活,并且具有更多的功能,如设定虚拟目录属性等


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3