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":

  ?

1
2
3
4

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方法。

  ?

1
2
3

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

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

  ?

1
2
3
4
5
6

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

  IIs创建虚拟目录

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159

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#程序设计有所帮助。

时间: 2024-09-12 07:34:16

C#创建IIS虚拟目录的方法的相关文章

使用visual studio自动创建IIS虚拟目录_实用技巧

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

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

应用到: 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 创建

用ADSI控制IIS创建网站, 虚拟目录…… (C#)

iis|创建|控制|虚拟目录  这是当年赶工的网站用到的东东, 结果快做完了警察叔叔来个网站要备案,朋友不干了,我也停工了, 翻出来共享了~ 据说,控制IIS和别的MS的垃圾(MS的FTP, 用户管理.....)可以用ADSI和WMI(WIN2k3的才好), 参考了网友们的资料,有版权问题麻烦EMAIL一下 原来是按三层写的代码没有整理, 权当笔记,省点稿纸, 大家看个大概, 详细的MSDN都有! 三个文件: ////////FileName: hostservice.cs //////////

在Windows 7中IIS配置Asp.Net虚拟目录的方法及常见错误

在Win7中IIS配置Asp.Net虚拟目录的方法总结! 一.右键[网站],点击[添加虚拟目录]或[虚拟应用程序],笔者建议最好建立虚拟应用程序,因为这就跟一个网站差不多,不用考虑路径问题. 二.直接输入相应内容选择路径就行了,如果要指定[应用程序池],需要先建立一个新的[应用程序池],配置与网站差不多了. 三.运行后,如果出现以下错误:HTTP 错误 500.19 一般是web.config配置问题,很简单,找到以下内容 <system.webServer>        <defau

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

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

使用用于SQL Server的IIS虚拟目录管理实用工具

iis|server|虚拟目录 在使用 HTTP 访问 Microsoft? SQL Server? 2000 数据库之前,必须安装适当的虚拟目录.在运行 Microsoft Internet 信息服务 (IIS) 的计算机上,使用用于 SQL Server 的 IIS 虚拟目录管理实用工具(在"SQL Server 工具"程序组中单击"在 IIS 中配置 SQL XML 支持")定义并注册新的虚拟目录,即所谓的虚拟根.该实用工具指示 IIS 在新的虚拟目录和 Mi

使用用于 SQL Server 的 IIS 虚拟目录管理实用工具

iis|server|虚拟目录 使用用于 SQL Server 的 IIS 虚拟目录管理实用工具在使用 HTTP 访问 Microsoft? SQL Server? 2000 数据库之前,必须安装适当的虚拟目录.在运行 Microsoft Internet 信息服务 (IIS) 的 计算机上,使用用于 SQL Server 的 IIS 虚拟目录管理实用工具(在"SQL Server 工具"程序组中单击"在 IIS 中配置 SQL XML 支持")定义 并注册新的虚拟

使用用于SQL IIS虚拟目录管理实用工具

在使用 HTTP 访问 Microsoft SQL Server 2000 数据库之前,必须安装适当的虚拟目录.在运行 Microsoft Internet 信息服务 (IIS) 的计算机上,使用用于 SQL Server 的 IIS 虚拟目录管理实用工具(在"SQL Server 工具"程序组中单击"在 IIS 中配置 SQL XML 支持")定义并注册新的虚拟目录,即所谓的虚拟根.该实用工具指示 IIS 在新的虚拟目录和 Microsoft SQL Server

Windows系统下安装Tomcat服务器和配置虚拟目录的方法_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 安装完成后,打开"我的电脑"->"系统属性"->"环境变量"在"用户变量" 新建"CA