C#创建IIS虚拟目录的方法

本文实例讲述了C#创建IIS虚拟目录的方法。分享给大家供大家参考。具体分析如下:

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.DirectoryServices.DirectoryEntries

IIs创建虚拟目录

using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
namespace Install_IIS
{
  class IISManager
  {
    public IISManager()
    {
    }
    /// <summary>
    /// 创建虚拟目录
    /// </summary>
    /// <param name="WebSite">服务器站点名称</param>
    /// <param name="VDirName">虚拟目录名称</param>
    /// <param name="Path"></param>
    /// <param name="RootDir"></param>
    /// <param name="chkRead"></param>
    /// <param name="chkWrite"></param>
    /// <param name="chkExecute"></param>
    /// <param name="chkScript"></param>
    /// <param name="chkAuth"></param>
    /// <param name="webSiteNum">1</param>
    /// <param name="serverName">localhost</param>
    /// <returns></returns>
    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;
      //
      // 确定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 (IISAdmin == null)
        return "IIS 未正常安装";
      if (IISAdmin.Children == null)
        return "IIS 可能未启动";
      //
      // 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;
      }
      //
      // Make it a web application
      // 创建一个web应用
      //
      VDir.Properties["Path"][0] = Path;
      //设置虚拟目录指向的物理路径
      if (IISUnderNT)
      {
        VDir.Invoke("AppCreate", false);
      }
      else
      {
        VDir.Invoke("AppCreate", 1);
      }
      //
      // 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["DefaultDoc"][0] = "index.asp,Default.aspx";//设置默认文档,多值情况下中间用逗号分割
      VDir.Properties["AppFriendlyName"][0] = VDirName; //应用程序名称
      VDir.Properties["AuthFlags"][0] = 0;  //  设置目录的安全性,0表示不允许匿名访问,1为允许,3为基本身份验证,7为windows继承身份验证
      VDir.Properties["AuthNTLM"][0] = chkAuth;
      VDir.Properties["EnableDefaultDoc"][0] = true;
      VDir.Properties["EnableDirBrowsing"][0] = false;
      //
      // NT doesn't support this property
      // NT格式不支持这特性
      //
      if (!IISUnderNT)
      {
        VDir.Properties["AspEnableParentPaths"][0] = true;
      }
      //
      // Set the changes
      // 设置改变
      //
      VDir.CommitChanges();
      //下面的方法是得到所有属性名称的方法:
      foreach (PropertyValueCollection pvc in VDir.Properties)
      {
        Console.WriteLine(pvc.PropertyName);
      }
      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
  }
}

测试用:

代码如下:

MessageBox.Show(new IISManager().CreateVDir("localhost", "ietm", "c:\\myweb", false, true, false, false, true, false, 1, "localhost"));

这个我已投入项目中使用,可放心使用。

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • 用C#操纵IIS(代码)

    using System;  using System.DirectoryServices;  using System.Collections;  using System.Text.RegularExpressions;  using System.Text;  /**   * @author 吴海燕   * @email  wuhy80-usual@yahoo.com   * 2004-6-25 第一版   */   namespace Wuhy.ToolBox  {       /// 

  • C#操作IIS方法集合

    C# 操作IIS方法集合 如果在win8,win7情况下报错:未知错误(0x80005000) ----见http://www.jb51.net/article/72881.htm using System; using System.Collections; using System.Collections.Generic; using System.DirectoryServices; using System.Linq; using System.Net; using System.Tex

  • C#操作IIS程序池及站点的创建配置实现代码

    首先要对Microsoft.Web.Administration进行引用,它主要是用来操作IIS7: using System.DirectoryServices;using Microsoft.Web.Administration; 1:首先是对本版IIS的版本进行配置: 复制代码 代码如下: DirectoryEntry getEntity = new DirectoryEntry("IIS://localhost/W3SVC/INFO");            string V

  • C#修改IIS站点framework版本号的方法

    本文实例讲述了C#修改IIS站点framework版本号的方法.分享给大家供大家参考.具体如下: 使用ASP.NET IIS 注册工具 (Aspnet_regiis.exe)可以方便地更新 ASP.NET 应用程序的脚本映射,使其指向与该工具关联的 ASP.NET ISAPI 版本. 关于ASP.NET IIS 注册工具的更详细的内容,请参考MSDN. 在控制台上我们使用下面的命令可以修改一个虚拟目录的Asp.Net版本: 复制代码 代码如下: Aspnet_iis.exe –s path 我们

  • c# 解决IIS写Excel的权限问题

    具体配置方法如下: 1:在服务器上安装office的Excel软件. 2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务" 3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置" 4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击

  • c#操作iis根目录的方法

    本文实例讲述了c#操作iis根目录的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.DirectoryServices; using System.Collections; namespace IISManagement { /// <summary> /// IISManager 的摘要说明. /// </summary> public class IISManager { //定义需要使用的 private string _

  • C#实现创建,删除,查找,配置虚拟目录实例详解

    本文实例讲述了C#实现创建,删除,查找,配置虚拟目录的方法.分享给大家供大家参考.具体如下: #region<<虚拟目录>> /// <summary> /// 创建虚拟目录 /// </summary> /// <param >虚拟目录别名</param> /// <param >内容所在路径</param> public static bool CreateVirtualDirectory(string w

  • C#实现获取IIS站点及虚拟目录信息的方法

    本文实例讲述了C#实现获取IIS站点及虚拟目录信息的方法.分享给大家供大家参考.具体如下: using System; using System.DirectoryServices; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { DirectoryEntry rootEntr

  • C#创建IIS虚拟目录的方法

    本文实例讲述了C#创建IIS虚拟目录的方法.分享给大家供大家参考.具体分析如下: DirectoryEntry是.Net给我们的一大礼物,他的名字我们就知道他的功能--目录入口.使用过ADSI的人都知道操作IIS,WinNT这些时,我们还需要提供他们的Path,操作IIS时,这个Path的格式为: 复制代码 代码如下: IIS://ComputerName/Service/Website/Directory ComputerName:即操作的服务器的名字,可以是名字也可以是IP,经常用的就是lo

  • 使用 iisftpdr.vbs 创建 FTP 虚拟目录的方法

    应用到: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1 可以使用命令行脚本 iisftpdr.vbs(存储在 systemroot\System32\ 中)在运行带有 IIS 6.0 的 Windows Server 2003 家族成员的本地或远程计算机上创建新的 FTP 虚拟目录.该命令不创建或破坏内容,而只是简单地设置虚拟目录结构和 IIS 配置文件. 如果没有iisftpdr.vbs文件可

  • 使用visual studio自动创建IIS虚拟目录

    1, 在web属性中,点击创建"Create Virtual Directory". 2, 在IIS中将显示创建好的虚拟目录 注意:如果虚拟目录层数大于1,则需要在C:\inetpub\wwwroot中手动创建对应的子目录.

  • C# .NET创建虚拟目录的方法详解

    目录 使用背景 配置 创建 使用 结语 使用背景 虚拟目录(virtual directory),计算机术语,每个 Internet服务可以从多个目录中发布.通过以通用命名约定 (UNC) 名.用户名及用于访问权限的密码指定目录,可将每个目录定位在本地驱动器或网络上.指定客户 URL地址, 服务将整个发布目录集提交给客户作为一个目录树.宿主目录是“虚拟”目录树的根.虚拟目录的实际子目录对于客户也是可用的.只有http://www.服务支持虚拟服务器:而 FTP和 gopher服务则只能有一个宿主

  • iisvdir.vbs iis虚拟目录管理脚本使用介绍

    IIS管理器也是通过调用iisvdir.vbs来实现虚拟目录的创建和删除的.我们可以通过命令行的方式来执行iisvdir.vbs脚本 1)创建虚拟目录: cscript c:\windows\system32\iisvdir.vbs [/s server] [/u username /p password] /create [virtualRoot] Alias PhysicalPath 2)删除虚拟目录: 1cscript c:\windows\system32\iisvdir.vbs [/s

  • 使用ADSI、ASP和一对魔术戏法自动地创立一个虚拟目录的方法

    使用ADSI.ASP和一对魔术戏法自动地创立一个虚拟目录,第二部分 Tom Moran 和 Jeff Sandquist 1999年2月22日 我们回来了.大家翘首以盼的这篇文章的第二部分现在在这儿.并且我想你将花费整个晚上看你的猫清洗自己. 这个月,Jeff Sandquist和我完成了我们的动态目录服务接口(Active Directory Services Interfaces ,ADSI)应用程序.如果你来晚了一点,没有问题:只要见这个系列的Part 1 http://www.micro

  • CMD下建立虚拟目录的方法

    以下是丑要饭的<web数据分离>    web 和 数据分离,有Pcanywhere,数据库服务器有 IIS, cscript.exe c:\inetpub\adminscripts\adsutil.vbs get w3svc/1/serverbindings 得到第一个Web服务的端口 cscript.exe c:\inetpub\adminscripts\adsutil.vbs create w3svc/1/root/wodexi/ IisWebVirtualDir创建一个虚拟目录wode

  • Windows系统下安装Tomcat服务器和配置虚拟目录的方法

    安装Tomcat和配置环境变量 安装jdk,这个我就不用说了 安装的时候指定安装路径,我指定的是: D:\Program Files\Java\jdk1.6.0_05 3.解压下载的apache-tomcat-5.5.23.zip,   我指定的是D:\Program Files\apache-tomcat-5.5.26 安装完成后,打开"我的电脑"->"系统属性"->"环境变量"在"用户变量" 新建"C

  • Tomcat 中如何给 web 项目配置虚拟目录的方法

     为什么要给 web 项目配置虚拟目录? 初学 JavaWeb 时,会发现只要我们把 web 项目放到 Tomcat 的 webapps 目录下,再通过 http://localhost:8080/项目名称/某个页面 就可以访问该网站了.可是这样并不符合规范,最好还是把 web 项目文件和 Tomcat 的安装文件分开.那如何实现这个要求呢?当然是给 web 项目配置虚拟目录啦. 如何给 web 项目配置虚拟目录? 前面已经说了,我们要把项目文件和 Tomcat 安装文件分离开.假设我们这里把

  • 详解Tomcat服务器绑定多域名和虚拟目录的方法

    tomcat采用默认安装,要想tamcat直接绑定多个域名,这里我们需要修改配置文件:C:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\server.xml server.xml 的修改方式如下: (一)多域名绑定 1.如果你要绑定网站,首先是要把tomcat的默认访问端口8080,修改成80 原始: <Connector port="8080" maxHttpHeaderSize="8192&quo

随机推荐