using System;
using System.Data;
using System.DirectoryServices;
using System.Collections;
namespace IISManage
{
/// <summary>
/// IIS管理类,可以实现创建站点、虚拟目录,删除虚拟目录等
/// </summary>
public class IISManager
{
private string _server,_website,_AnonymousUserPass,_AnonymousUserName;
private VirtualDirectories _virdirs;
protected System.DirectoryServices.DirectoryEntry rootfolder;
private bool _batchflag;
#region 构造函数
/// <summary>
/// 构造函数
/// </summary>
public IISManager()
{
//默认情况下使用localhost,即访问本地机
_server = localhost;
_website = 1;
_batchflag = false;
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name=strServer>服务器</param>
public IISManager(string strServer)
{
_server = strServer;
_website = 1;
_batchflag = false;
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name=strServer>服务器</param>
/// <param name=website>站点,每一个站点为1,第二个站点为2,依此类推</param>
public IISManager(string strServer,int website)
{
_server = strServer;
_website = website.ToString();
_batchflag = false;
}
#endregion
#region 定义公共属性
/// <summary>
/// 匿名访问用户
/// </summary>
public string AnonymousUserName
{
get{ return _AnonymousUserName;}
set{ _AnonymousUserName = value;}
}
/// <summary>
/// 匿名访问用户密码
/// </summary>
public string AnonymousUserPass
{
get{ return _AnonymousUserPass;}
set{ _AnonymousUserPass = value;}
}
/// <summary>
/// 服务器,可以是IP或计算名
/// </summary>
public string Server
{
get{ return _server;}
set{ _server = value;}
}
/// <summary>
/// 站点,一般来说第一台主机为1,第二台主机为2,依次类推
/// </summary>
public int WebSite
{
get{ return Convert.ToInt32(_website); }
set{ _website = Convert.ToString(value); }
}
/// <summary>
/// 虚拟目录的名字
/// </summary>
public VirtualDirectories VirDirs
{
get{ return _virdirs; }
set{ _virdirs = value;}
}
#endregion
#region 定义公共方法
/// <summary>
/// 获取匿名访问用户的用户名和密码
/// </summary>
public void get_AnonymousUser()
{
_AnonymousUserPass=IUSR_DEVE-SERVER;
_AnonymousUserName=IUSR_DEVE-SERVER;
VirtualDirectory vDir;
try
{
Hashtable myList = (Hashtable)_virdirs;
IDictionaryEnumerator myEnumerator = myList.GetEnumerator();
while ( myEnumerator.MoveNext() )
{
vDir = (VirtualDirectory)myEnumerator.Value;
if (vDir.AnonymousUserName!= && vDir.AnonymousUserPass != )
{
_AnonymousUserName=vDir.AnonymousUserName;
_AnonymousUserPass=vDir.AnonymousUserPass;
break;
}
}
}
catch
{
_AnonymousUserPass=IUSR_DEVE-SERVER;
_AnonymousUserName=IUSR_DEVE-SERVER;
}
}
/// <summary>
/// 连接服务器
/// </summary>
public void Connect()
{
ConnectToServer();
}
/// <summary>
/// 连接服务器
/// </summary>
/// <param name=strServer>服务器名称</param>
public void Connect(string strServer)
{
_server = strServer;
ConnectToServer();
}
/// <summary>
/// 连接服务器
/// </summary>
/// <param name=strServer>服务器名称</param>
/// <param name=strWebSite>站点,一般来说第一台主机为1,第二台主机为2,依次类推</param>
public void Connect(string strServer,string strWebSite)
{
_server = strServer;
_website = strWebSite;
ConnectToServer();
}
/// <summary>
/// 添加一个站点
/// </summary>
/// <param name=path>站点的路径</param>
public void CreateWebSite(string webSiteName,string port,string path)
{
try
{
DirectoryEntry root = new DirectoryEntry(IIS://+this._server+/W3SVC);
int siteID = 1;
foreach(DirectoryEntry e in root.Children)
{
if(e.SchemaClassName == IIsWebServer)
{
int ID = Convert.ToInt32(e.Name);
if(ID >= siteID){siteID = ID+1;}
if(e.Properties[ServerBindings][0].ToString() == :+port+:)
{
throw new Exception(port+已被占用,请选择其它端口!);
}
}
}
DirectoryEntry site = (DirectoryEntry)root.Invoke(Create, IIsWebServer, siteID);
site.Invoke(Put, ServerComment, webSiteName);
site.Invoke(Put, KeyType, IIsWebServer);
site.Invoke(Put, ServerBindings, :+port+:);
site.Invoke(Put, ServerState, 2);
site.Invoke(Put, FrontPageWeb, 1);
site.Invoke(Put, DefaultDoc, index.aspx);
site.Invoke(Put, SecureBindings, :443:);
site.Invoke(Put, ServerAutoStart, 1);
site.Invoke(Put, ServerSize, 1);
site.Invoke(SetInfo);
DirectoryEntry siteVDir = site.Children.Add(Root, IISWebVirtualDir);
siteVDir.Properties[AppIsolated][0] = 2;
siteVDir.Properties[Path][0] = path;
siteVDir.Properties[AccessFlags][0] = 513;
siteVDir.Properties[FrontPageWeb][0] = 1;
//siteVDir.Properties[AppRoot][0] = LM/W3SVC/+siteID+/Root;
siteVDir.Properties[AppFriendlyName][0] = ROOT;
siteVDir.CommitChanges();
site.CommitChanges();
}
catch(Exception ex)
{
throw ex;
}
}
/// <summary>
/// 取得所有站点
/// </summary>
/// <returns></returns>
public System.Collections.Hashtable getSites()
{
try
{
DirectoryEntry root = new DirectoryEntry(IIS://+this._server+/W3SVC);
Hashtable sites = new Hashtable();
foreach(DirectoryEntry e in root.Children)
{
if(e.SchemaClassName == IIsWebServer)
{
sites.Add(e.Name,e);
}
}
return sites;
}
catch(Exception ex)
{
throw ex;
}
}
/// <summary>
/// 判断是否存这个虚拟目录
/// </summary>
/// <param name=strVirdir>虚拟目录名称</param>
/// <returns></returns>
public bool Exists(string strVirdir)
{
return _virdirs.Contains(strVirdir);
}
/// <summary>
/// 添加一个虚拟目录
/// </summary>
/// <param name=newdir>虚拟目录</param>
/// <returns></returns>
public bool CreateVirtualDirectory(VirtualDirectory newdir)
{
string strPath = IIS:// + _server + /W3SVC/ + _website + /ROOT/ + newdir.Name;
if(!_virdirs.Contains(newdir.Name) || _batchflag )
{
try
{
//加入到ROOT的Children集合中去
DirectoryEntry newVirDir = rootfolder.Children.Add(newdir.Name,IIsWebVirtualDir);
newVirDir.Invoke(AppCreate,true);
newVirDir.CommitChanges();
rootfolder.CommitChanges();
//然后更新数据
UpdateDirInfo(newVirDir,newdir);
return true;
}
catch(Exception)
{
return false;
}
}
else
{
return false;
}
}
/// <summary>
/// 得到一个虚拟目录
/// </summary>
/// <param name=strVirdir>虚拟目录名</param>
/// <returns></returns>
public VirtualDirectory GetVirDir(string strVirdir)
{
VirtualDirectory tmp = null;
if(_virdirs.Contains(strVirdir))
{
tmp = _virdirs.Find(strVirdir);
((VirtualDirectory)_virdirs[strVirdir]).flag = 2;
}
else
{
throw new Exception(虚拟目录+strVirdir+不存在!);
}
return tmp;
}
/// <summary>
/// 更新一个虚拟目录
/// </summary>
/// <param name=dir>虚拟目录</param>
public void Update(VirtualDirectory dir)
{
//判断需要更改的虚拟目录是否存在
if(_virdirs.Contains(dir.Name))
{
DirectoryEntry ode = rootfolder.Children.Find(dir.Name,IIsWebVirtualDir);
UpdateDirInfo(ode,dir);
}
else
{
System.Windows.Forms.MessageBox.Show(虚拟目录+dir.Name+不存在!);
}
}
/// <summary>
/// 删除一个虚拟目录
/// </summary>
/// <param name=strVirdir>虚拟目录名</param>
public void Delete(string strVirdir)
{
if(_virdirs.Contains(strVirdir))
{
object[] paras = new object[2];
paras[0] = IIsWebVirtualDir; //表示操作的是虚拟目录
paras[1] = strVirdir;
IIS管理类-创建站点、虚拟目录,删除虚拟目录
5星 · 超过95%的资源 需积分: 14 27 浏览量
2008-09-05
21:09:42
上传
评论 1
收藏 4KB RAR 举报
kbynii
- 粉丝: 22
- 资源: 30
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈