您的位置:首页 > 编程语言 > ASP

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

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

1、通过调用iisvdir.vbs,
2、通过System.DirectoryServices.DirectoryEntry。

如果看官有其他的方法,欢迎讨论chwkai@gmail.com

为了方便描述,我写了两个虚拟目录操作类,简单的封装了iisvdir.vbs和System.DirectoryServices.DirectoryEntry管理虚拟目录的方法,结构如下所示:

cscript c:\windows\system32\iisvdir.vbs [/s server] [/u username /p password] /create [virtualRoot] Alias PhysicalPath

2)删除虚拟目录:

cscript c:\windows\system32\iisvdir.vbs [/s server] [/u username /p password] /delete [virtualRoot]/Alias


3)查看指定虚拟目录下的全部子目录:

cscript c:\windows\system32\iisvdir.vbs [/s server] [/u username /p password] /query virtualRoot


通过封装这三个操作,可以实现iis虚拟目录的创建、删除和判断是否存在:
1)创建虚拟目录:

1 /// <summary>
2         /// 创建iis虚拟目录
3         /// </summary>
4         /// <exception cref="CreateIIsDirectory.DirectoryException">虚拟目录操作异常</exception>
5         public override void CreateDirectory()
6         {
7             // 已不覆盖的方式创建虚拟目录,当虚拟目录存在时抛出异常
8             this.CreateDirectory(false);
9         }

/// <summary>
/// 创建iis虚拟目录
/// </summary>
/// <param name="bReplace">是否覆盖掉原有的虚拟目录</param>
/// <exception cref="CreateIIsDirectory.DirectoryException">虚拟目录操作异常</exception>
public override void CreateDirectory(bool bReplace)
{
// 判断目录是否存在
if (this.Exist())
{
if (bReplace)
{
// 若允许覆盖则先删除原有的虚拟目录
this.DeleteDirectory();
}
else
{
// 若不允许覆盖直接抛出目录已存在的异常
DirectoryException.Throw("directory already exist");
}
}

ReturnMessage message = ScriptDirectory.ExecuteScript(
this, ScriptDirectory.CONST_ACTION_CREATE);

// 输出message信息供nunit查看
Console.WriteLine("return code: " + message.Code);
Console.WriteLine("return message: \n" + message.Message);

// 若创建失败抛出虚拟目录操作异常
if (message.Code != 0)
{
DirectoryException.Throw(message.Message);
}
}


2)删除虚拟目录:

1 /// <summary>
2         /// 删除iis虚拟目录
3         /// </summary>
4         /// <exception cref="CreateIIsDirectory.DirectoryException">虚拟目录操作异常</exception>
5         public override void DeleteDirectory()
6         {
7             ReturnMessage message = ScriptDirectory.ExecuteScript(
8                 this, ScriptDirectory.CONST_ACTION_DELETE);
9
// 输出message信息供nunit查看
Console.WriteLine("return code: " + message.Code);
Console.WriteLine("return message: \n" + message.Message);

// 若删除失败抛出虚拟目录操作异常
if (message.Code != 0)
{
DirectoryException.Throw(message.Message);
}
}


3) 判断虚拟目录是否存在:

1 /// <summary>
2         /// 判断iis虚拟目录是否存在
3         /// </summary>
4         /// <returns>目录是否存在</returns>
5         public override bool Exist()
6         {
7             ReturnMessage message = ScriptDirectory.ExecuteScript(
8                 this, ScriptDirectory.CONST_ACTION_QUERY);
9             bool bExist = false;

// 输出message信息供nunit查看
Console.WriteLine("return code: " + message.Code);
Console.WriteLine("return message: \n" + message.Message);

// 从返回字符串中判断该虚拟目录是否存在
if (message.Code == 0)
{
Regex reg = new Regex("/" + this.m_strAlias + @"\s+");
message.Message = message.Message.Substring(
message.Message.IndexOf("/"));

bExist = reg.IsMatch(message.Message);
}

return bExist;
}


ScriptDirectory.ExecuteScript函数封装了iisvdir.vbs的调用和参数的组合,代码比较长,大家可以在/Files/chwkai/CreateIIsDirectory.rar下载到本文所讨论的代码。

orz,明天还有场球赛,睡觉了。下次的文章将继续写到,如何用System.DirectoryServices.DirectoryEntry来创建IIS虚拟目录,相对于iisvdir.vbs,这种方式更加灵活,并且具有更多的功能,如设定虚拟目录属性等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: