分享
 
 
 

IIS操作类

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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;

rootfolder.Invoke("Delete",paras);

rootfolder.CommitChanges();

}

else

{

System.Windows.Forms.MessageBox.Show("虚拟目录"+strVirdir+"不存在!");

}

}

/// <summary>

/// 批量更新

/// </summary>

public void UpdateBatch()

{

BatchUpdate(_virdirs);

}

/// <summary>

/// 批量更新

/// </summary>

/// <param name="vds">虚拟目录集合</param>

public void UpdateBatch(VirtualDirectories vds)

{

BatchUpdate(vds);

}

/// <summary>

/// 获取虚拟目录集合

/// </summary>

/// <returns></returns>

public VirtualDirectories GetVirtualDirdctories()

{

VirtualDirectories vds = GetVirDirs(this.rootfolder.Children);

return vds;

}

#endregion

#region 私有方法

/// <summary>

/// 关闭当前对象

/// </summary>

public void Close()

{

_virdirs.Clear();

_virdirs = null;

rootfolder.Dispose();

}

/// <summary>

/// 连接服务器

/// </summary>

private void ConnectToServer()

{

string strPath = "IIS://" + _server + "/W3SVC/" + _website +"/ROOT";

try

{

this.rootfolder = new DirectoryEntry(strPath);

_virdirs = GetVirDirs(this.rootfolder.Children);

}

catch(Exception)

{

System.Windows.Forms.MessageBox.Show("无法连接到服务器:"+_server);

}

}

/// <summary>

/// 执行批量更新

/// </summary>

/// <param name="vds">虚拟目录集合</param>

private void BatchUpdate(VirtualDirectories vds)

{

_batchflag = true;

foreach(object item in vds.Values)

{

VirtualDirectory vd = (VirtualDirectory)item;

switch(vd.flag)

{

case 0:

break;

case 1:

CreateVirtualDirectory(vd);

break;

case 2:

Update(vd);

break;

}

}

_batchflag = false;

}

/// <summary>

/// 更新指定虚拟目录

/// </summary>

/// <param name="de"></param>

/// <param name="vd">要执行更新的虚拟目录</param>

private void UpdateDirInfo(DirectoryEntry de,VirtualDirectory vd)

{

de.Properties["AnonymousUserName"][0] = vd.AnonymousUserName;

de.Properties["AnonymousUserPass"][0] = vd.AnonymousUserPass;

de.Properties["AccessRead"][0] = vd.AccessRead;

de.Properties["AccessExecute"][0] = vd.AccessExecute;

de.Properties["AccessWrite"][0] = vd.AccessWrite;

de.Properties["AuthBasic"][0] = vd.AuthBasic;

de.Properties["AuthNTLM"][0] = vd.AuthNTLM;

de.Properties["ContentIndexed"][0] = vd.ContentIndexed;

de.Properties["EnableDefaultDoc"][0] = vd.EnableDefaultDoc;

de.Properties["EnableDirBrowsing"][0] = vd.EnableDirBrowsing;

de.Properties["AccessSSL"][0] = vd.AccessSSL;

de.Properties["AccessScript"][0] = vd.AccessScript;

de.Properties["DefaultDoc"][0] = vd.DefaultDoc;

de.Properties["Path"][0] = vd.Path;

de.CommitChanges();

}

/// <summary>

/// 获取虚拟目录集合

/// </summary>

/// <param name="des"></param>

/// <returns></returns>

private VirtualDirectories GetVirDirs(DirectoryEntries des)

{

VirtualDirectories tmpdirs = new VirtualDirectories();

foreach(DirectoryEntry de in des)

{

if(de.SchemaClassName == "IIsWebVirtualDir")

{

VirtualDirectory vd = new VirtualDirectory();

vd.Name = de.Name;

vd.AccessRead = (bool)de.Properties["AccessRead"][0];

vd.AccessExecute = (bool)de.Properties["AccessExecute"][0];

vd.AccessWrite = (bool)de.Properties["AccessWrite"][0];

vd.AnonymousUserName = (string)de.Properties["AnonymousUserName"][0];

vd.AnonymousUserPass = (string)de.Properties["AnonymousUserName"][0];

vd.AuthBasic = (bool)de.Properties["AuthBasic"][0];

vd.AuthNTLM = (bool)de.Properties["AuthNTLM"][0];

vd.ContentIndexed = (bool)de.Properties["ContentIndexed"][0];

vd.EnableDefaultDoc = (bool)de.Properties["EnableDefaultDoc"][0];

vd.EnableDirBrowsing = (bool)de.Properties["EnableDirBrowsing"][0];

vd.AccessSSL = (bool)de.Properties["AccessSSL"][0];

vd.AccessScript = (bool)de.Properties["AccessScript"][0];

vd.Path = (string)de.Properties["Path"][0];

vd.flag = 0;

vd.DefaultDoc = (string)de.Properties["DefaultDoc"][0];

tmpdirs.Add(vd.Name,vd);

}

}

return tmpdirs;

}

#endregion

}

/// <summary>

/// 虚拟目录实体

/// </summary>

public class VirtualDirectory

{

private bool _read,_execute,_script,_ssl,_write,_authbasic,_authntlm,_indexed,_endirbrow,_endefaultdoc;

private string _ausername,_auserpass,_name,_path;

private int _flag;

private string _defaultdoc;

#region 构造函数

/// <summary>

/// 构造函数

/// </summary>

public VirtualDirectory()

{

SetValue();

}

/// <summary>

/// 构造函数

/// </summary>

/// <param name="sVirDirName">虚拟目录名</param>

public VirtualDirectory(string sVirDirName)

{

SetValue();

_name = sVirDirName;

}

/// <summary>

/// 构造函数

/// </summary>

/// <param name="sVirDirName">虚拟目录名</param>

/// <param name="strPhyPath">物理路径</param>

/// <param name="AnonymousUser"></param>

public VirtualDirectory(string sVirDirName,string strPhyPath,string[] AnonymousUser)

{

SetValue();

_name = sVirDirName;

_path = strPhyPath;

_ausername = AnonymousUser[0];

_auserpass = AnonymousUser[1];

}

#endregion

/// <summary>

/// 设置虚拟目录的属性

/// </summary>

private void SetValue()

{

_read = true;

_execute = false;

_script = true;

_ssl= false;

_write=false;

_authbasic=false;

_authntlm=true;

_indexed = true;

_endirbrow=false;

_endefaultdoc = true;

_flag = 1;

_defaultdoc = "index.aspx";

_path = "C:\\";

_ausername = "IUSR_DEVE-SERVER";

_auserpass ="IUSR_DEVE-SERVER";

_name="";

}

public override string ToString()

{

return this._name;

}

#region 定义属性

public int flag

{

get{ return _flag;}

set{ _flag = value;}

}

public bool AccessRead

{

get{ return _read;}

set{ _read = value;}

}

public bool AccessWrite

{

get{ return _write;}

set{ _write = value;}

}

public bool AccessExecute

{

get{ return _execute;}

set{ _execute = value;}

}

public bool AccessSSL

{

get{ return _ssl;}

set{ _ssl = value;}

}

public bool AccessScript

{

get{ return _script;}

set{ _script = value;}

}

public bool AuthBasic

{

get{ return _authbasic;}

set{ _authbasic = value;}

}

public bool AuthNTLM

{

get{ return _authntlm;}

set{ _authntlm = value;}

}

public bool ContentIndexed

{

get{ return _indexed;}

set{ _indexed = value;}

}

public bool EnableDirBrowsing

{

get{ return _endirbrow;}

set{ _endirbrow = value;}

}

public bool EnableDefaultDoc

{

get{ return _endefaultdoc;}

set{ _endefaultdoc = value;}

}

public string Name

{

get{ return _name;}

set{ _name = value;}

}

public string Path

{

get{ return _path;}

set{ _path = value;}

}

public string DefaultDoc

{

get{ return _defaultdoc;}

set{ _defaultdoc = value;}

}

public string AnonymousUserName

{

get{ return _ausername;}

set{ _ausername = value;}

}

public string AnonymousUserPass

{

get{ return _auserpass;}

set{ _auserpass = value;}

}

#endregion

}

/// <summary>

/// 虚拟目录集合类

/// </summary>

public class VirtualDirectories : System.Collections.Hashtable

{

public VirtualDirectories()

{

}

/// <summary>

/// 搜索指定的虚拟目录

/// </summary>

/// <param name="strName">虚拟目录名</param>

/// <returns></returns>

public VirtualDirectory Find(string strName)

{

return (VirtualDirectory)this[strName];

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有