`
happmaoo
  • 浏览: 4368736 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

在Asp.net中操作IIS的虚拟目录(C#)

阅读更多

创建虚拟目录

DirectoryEntry是.Net给我们的一大礼物,他的名字我们就知道他的功能--目录入口。使用过ADSI的人都知道操作IIS,WinNT这些时,我们还需要提供他们的Path,操作IIS时,这个Path的格式为:

IIS://ComputerName/Service/Website/Directory

ComputerName:即操作的服务器的名字,可以是名字也可以是IP,经常用的就是localhost
Service:即操作的服务器,IIS中有Web,也有FTP,还有SMTP这些服务,我们主要是操作IIS的Web功能,因此此处就是"W3SVC",如果是FTP则应是"MSFTPSVC"
WebSite:一个IIS服务中可以包括很多的站点,这个就用于设置操作的站点。他的值是一个数字,默认是1,表示缺省站点,如果有其它,则从1开始依次类推。
Directory:不用说,即操作的目录名称,一个站点一般顶层目录为"ROOT",其它目录则是他的孩子(Child)。
首先我们获取一个站点的顶层目录(根目录):

DirectoryEntry rootfolder = new DirectoryEntry("IIS://localhost/W3SVC/1/ROOT");

如果我们创建这个对象是没有发生异常,则表示这个目录是真实存在的。

下面我们来添加新的虚拟目录,比如我们要加的是"Aspcn":

DirectoryEntry newVirDir = rootfolder.Children.Add("Aspcn","IIsWebVirtualDir");
newVirDir.Invoke("AppCreate",true);
newVirDir.CommitChanges();
rootfolder.CommitChanges();
 

创建目录的思路很简单,即在根目录的子集(rootfolder.Children)中再添加一条记录,这里使用的是DirectoryEntries类中的Add方法,它返回的是一个DirectoryEntry,表示新加入的目录,第一个参数是虚拟目录的名字,第二个则是Schema的类名以表明我们加入的目录类型。然后再使用DirectoryEntry的Invoke方法,调用ADSI中的"AppCreate"方法将目录真正创建(似乎不走这一步也可以创建目录成功,但是为了保险起见,大家还是用吧),最后便是依次调用新、根目录的CommitChanges方法,确认此次操作。

在创建新目录时,我们也可以同时给这个目录的属性赋值,但是我的实战经验告诉我,最好不要这样做,如果创建时就赋值,将有很多属性不能赋值成功,比如重要的表示真实目录的Path属性。因此飞刀建议大家最好是先创建目录,然后再赋值,即更新目录信息。

更新虚拟目录

相信大家对IIS都比较熟悉,了解IIS中一些重要的设置,如可读(AccessRead)、可写(AccessWrite)、可执行(AccessExecute)等。这些都可通过对DirectoryEntry的Properties属性集合的赋值来实现。赋值可以通过两种方式来完成:

第一种是调用Properties集合的Add方法,如:

dir.Properties["AccessRead"].Add(true);

第二种是对第一个索引值赋值:

dir.Properties["AccessRead"][0] = true;

这两种方法都是可行的。具体是要看你的喜好了。

在进行赋值之前我们还是要确定要要赋值的目标吧:)这里我们使用DirectoryEntries类的Find方法,如:

DirectoryEntry de = rootfolder.Children.Find("Aspcn","IIsVirtualDir");

找到了,我们就可以赋值了。赋值时一定要好好看看啊,虚拟目录的属性值可以超多,一查一大堆。。:(太多了,飞刀我也不重复了,大家去微软的站点上查:)

比较常用的有:AccessRead,AccessWrite,AccessExecute,AccessScript,DefaultDoc,EnableDefaultDoc,Path

删除虚拟目录

删除虚拟目录的方法也很简单,就是找到你要删除的虚拟目录,然后调用AppDelete方法。

DirectoryEntry de = rootfolder.Children.Find("Aspcn","IIsVirtualDir");
de.Invoke("AppDelete",true);
rootfolder.CommitChanges();
 

还有一种方法,就是调用Root目录的Delete方法。

object[] paras = new object[2];
paras[0] = "IIsWebVirtualDir"; //表示操作的是虚拟目录
paras[1] = "Aspcn";
rootfolder.Invoke("Delete",paras);
rootfolder.CommitChanges();

System.Object
System.DirectoryServices.DirectoryEntries

IIs创建虚拟目录
http://www.eggheadcafe.com/articles/20040112.asp

using System;
using System.DirectoryServices;

namespace IISMgrAddin
{
 /// <summary>
 /// Summary description for IISManager.
 /// </summary>
 public class IISManager
 {
  /// <summary>
  ///  Constructor
  /// </summary>
  
  /// <summary>
  ///  Default constructor uses localhost as default server
  /// </summary>
  public IISManager()
  {
    
  }
 
public string CreateVDir(string WebSite, string VDirName, string Path, bool RootDir,
bool chkRead,bool chkWrite, bool chkExecute, bool chkScript, bool chkAuth,
int webSiteNum, string serverName) { string sRet=String.Empty; System.DirectoryServices.DirectoryEntry IISSchema; System.DirectoryServices.DirectoryEntry IISAdmin; System.DirectoryServices.DirectoryEntry VDir; bool IISUnderNT; // // Determine version of IIS // IISSchema = new System.DirectoryServices.DirectoryEntry("IIS://" +serverName +
"/Schema/AppIsolated"); if (IISSchema.Properties["Syntax"].Value.ToString().ToUpper() == "BOOLEAN") IISUnderNT = true; else IISUnderNT = false; IISSchema.Dispose(); // // Get the admin object // IISAdmin = new System.DirectoryServices.DirectoryEntry("IIS://" +serverName +
"/W3SVC/" + webSiteNum + "/Root"); // // If we're not creating a root directory // if (!RootDir) { // // If the virtual directory already exists then delete it // foreach(System.DirectoryServices.DirectoryEntry v in IISAdmin.Children) { if (v.Name == VDirName) { // Delete the specified virtual directory if it already exists try { IISAdmin.Invoke("Delete", new string [] { v.SchemaClassName, VDirName }); IISAdmin.CommitChanges(); } catch(Exception ex) { sRet+=ex.Message; } } } } // // Create the virtual directory // if (!RootDir) { VDir = IISAdmin.Children.Add(VDirName, "IIsWebVirtualDir"); } else { VDir = IISAdmin; } // // Setup the VDir // VDir.Properties["AccessRead"][0] = chkRead; VDir.Properties["AccessExecute"][0] = chkExecute; VDir.Properties["AccessWrite"][0] = chkWrite; VDir.Properties["AccessScript"][0] = chkScript; VDir.Properties["AuthNTLM"][0] = chkAuth; VDir.Properties["EnableDefaultDoc"][0] = true; VDir.Properties["EnableDirBrowsing"][0] = false; VDir.Properties["DefaultDoc"][0] = true; VDir.Properties["Path"][0] = Path; // // NT doesn't support this property // if (!IISUnderNT) { VDir.Properties["AspEnableParentPaths"][0] = true; } // // Set the changes // VDir.CommitChanges(); // // Make it a web application // if (IISUnderNT) { VDir.Invoke("AppCreate", false); } else { VDir.Invoke("AppCreate", 1); } sRet+= "VRoot " +VDirName + " created!"; return sRet; } #region Properties public string ServerName { get { return _serverName; } set { _serverName = value; } } #endregion public static string VirDirSchemaName = "IIsWebVirtualDir"; #region Private Members private string _serverName; #endregion } }
分享到:
评论

相关推荐

    用ASP.NET管理IIS站点,源码提供

    通过ASP.NET 2.0(C#)管理IIS站点。可以通过ASP.NET页面添加删除修改IIS站点,就像在IIS管理器当中单击属性一样。主要用于虚拟主机提供商的客户通过WEB管理自己的网站。 主要技术是用了ASP.NET的身份模拟技术,...

    深度学习(asp.Net)留言板源码(c#)v0.1.0

    新升级版本依然贯彻asp程序员迅速掌握asp.Net的思路,但功能完善,完整的留言板功能都具备了,可以对照前一版本,相信可以更快的学通asp.Net。 程序名称: 深度学习(asp.Net)留言板 v0.1.0 软件类别: asp.Net源码...

    ASP.NET学习大全

    ASP.NET对IIS中的虚拟目录进行操作.txt asp.net里导出excel表方法汇总.txt ASP.NET文件上传程序的源代码.txt Asp.Net中文本换行.txt ASPNET中实现在线用户检测(使用后台守护线程).txt C# 读取计算机CPU,HDD信息....

    asp.net学习大全(超全面的资料整合)

    ASP.NET对IIS中的虚拟目录进行操作.txt asp.net里导出excel表方法汇总.txt ASP.NET文件上传程序的源代码.txt Asp.Net中文本换行.txt ASPNET中实现在线用户检测(使用后台守护线程).txt C# 读取计算机CPU,HDD信息....

    Web程序设计--ASP.NET实用网站开发 课后习题答案

    本资源摘要信息涵盖了 ASP.NET 实用网站开发的各个方面,包括 .NET Framework、ASP.NET、Web 服务器、IIS、Visual Studio 2008、XHTML、CSS、JavaScript、C#、数据类型、类库、继承、枚举类型、数组等知识点。...

    asp.net知识库

    在ASP.NET页面中推荐使用覆写(Override)而不是事件处理(Event Handler) 常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    ASP.NET 4高级程序设计(第4版)》【原版书为:Pro ASP.NET 4 in C# 2010】是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的...

    精美ASP.Net个人网站管理系统V1.0

    2,设置虚拟目录,控制面板--&gt;管理工具--&gt;IIS--&gt;右击默认站点--&gt;新建虚拟目录,名为XFJ 3,完成后,打开IE,敲入http://localhost/XFJ/default.aspx 即可访问 管理员登陆: 户名:xfj 密码:xfj

    毕业设计 CommunityService.part01.rar(asp.net,C#)

    是直接关系到小区居民日常生活的系统,是近几年来楼市发展中必然出现的产物,它有力地缓解了小区物业在小区管理工作中,因为人员缺乏,以及资金紧张而带来的压力,实现统一化管理,使小区管理工作电子化,虚拟化,提高...

    车辆管理系统asp.net

    不错的车辆信息管理源码,下载后在IIS管理器中添加虚拟目录

    ASP.NET车站售票系统的设计与实现[源码+毕业论文+数据库]

    本光盘包括 毕业论文,英文翻译...2.系统安装IIS后,在IIS里建立虚拟目录,路径指向TICKETS,配置用户权限,可以在IE里输入127.0.0.1/LOGIN.ASPX,可以执行。 3.系统的高级管理员用户名为:admin,密码为:admin @更多@ ...

    ASP.net一夜速成视频教程列表

    因为教程偏重于代码编程,并且主旨在于“速成”,所以除了界面并无作任何美化之外,在代码解释上都尽可能做了中文注释,但是你可能还需要参考DW和C#等相关基础教程。注意:因为本教程节与节之间的关联性非常强,所以...

    [Asp.net+SQL]仿阿里巴巴B2B电子商务系统_hyb2b

    2.在IIS中新建站点,指向该文件夹,如果新建虚拟路径,会导致一些图片的不正常显示. 3."Database"文件夹内有数据库文件hyb2bTest_Data.MDF,在Sql Server企业管理器中选择"附加数据库" 4.需要修改根目录web.config文件...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    在ASP.Net课程的一开始,不是直接教学员怎么拖ASP.Net控件进行快速开发,而是通过ashx的模式开发原始的动态网站,让学员明白“请求—处理—响应模型”、“Http协议、Http无状态”、“c#代码渲染生成浏览器端...

    asp.net 双向探针

    ASP.NET+c#做的双向探针,即可以看服务器的相关信息,也可以看自己的信息。 不需要做任何设置,上传后就可运行(服务器要支持.net啊) 如果使用国外空间请将web.config一起上传,否则可能会出现乱码。 版本更新...

    聊天室代码(ASP.NET-C#)

    &lt;br&gt;2、配置IIS (1)打开“开始”→“控制面板”命令,打开“控制面板”窗口,在该窗口中双击“管理工具”图标,进入到“管理工具”窗口,在该窗口中双击“Internet 信息服务”图标,运行“Internet 信息...

    Asp.NET新闻发布系统(毕业设计版)v1.0

    LixyNews.sln 解决方案文件(用VS2005直接运行该文件可以打开项目,并进行调试,可以不用去IIS里面设什么虚拟目录啦,这是VS2005带来的方便) NewsWeb 源码文件夹 Default.aspx 新闻首页 AddNews.aspx 添加新闻 ...

    毕业设计 CommunityService.part02.rar(asp.net,C#)

    是直接关系到小区居民日常生活的系统,是近几年来楼市发展中必然出现的产物,它有力地缓解了小区物业在小区管理工作中,因为人员缺乏,以及资金紧张而带来的压力,实现统一化管理,使小区管理工作电子化,虚拟化,提高...

Global site tag (gtag.js) - Google Analytics