IIS管理类(C#)

using System;  

using System.Data;  

using System.DirectoryServices;  

using System.Collections;  

namespace Aspcn.Management  

{  

/// <summary>  

/// IISManager 的摘要说明。  

/// </summary>  


public class IISManager  

{  

//定义需要使用的  

private string _server,_website;  

private VirtualDirectories _virdirs;  

protected System.DirectoryServices.DirectoryEntry rootfolder;  

private bool _batchflag;  

public IISManager()  

{  

//默认情况下使用localhost,即访问本地机  

_server 
= "localhost";  

_website 
= "1";  

_batchflag 
= false;  

}
  

public IISManager(string strServer)  

{  

_server 
= strServer;  

_website 
= "1";  

_batchflag 
= false;  

}
  

/// <summary>  

/// 定义公共属性  

/// </summary>  




//Server属性定义访问机器的名字,可以是IP与计算名  

public string Server  

{  

getreturn _server;}  

set{ _server = value;}  

}
  

//WebSite属性定义,为一数字,为方便,使用string  

//一般来说第一台主机为1,第二台主机为2,依次类推  

public string WebSite  

{  

getreturn _website; }  

set{ _website = value; }  

}
  



//虚拟目录的名字  

public VirtualDirectories VirDirs  

{  

getreturn _virdirs; }  

set{ _virdirs = value;}  

}
  

///<summary>  

///定义公共方法  

///</summary>  




//连接服务器  

public void Connect()  

{  

ConnectToServer();  

}
  

//为方便重载  

public void Connect(string strServer)  

{  

_server 
= strServer;  

ConnectToServer();  

}
  

//为方便重载  

public void Connect(string strServer,string strWebSite)  

{  

_server 
= strServer;  

_website 
= strWebSite;  

ConnectToServer();  

}
  

//判断是否存这个虚拟目录  

public bool Exists(string strVirdir)  

{  

return _virdirs.Contains(strVirdir);  

}
  

//添加一个虚拟目录  

public void Create(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);  

}
  

catch(Exception ee)  

{  

throw new Exception(ee.ToString());  

}
  

}
  

else  

{  

throw new Exception("This virtual directory is already exist.");  

}
  

}
  

//得到一个虚拟目录  

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("This virtual directory is not exists");  

}
  

return tmp;  

}
  



//更新一个虚拟目录  

public void Update(VirtualDirectory dir)  

{  

//判断需要更改的虚拟目录是否存在  

if(_virdirs.Contains(dir.Name))  

{  

DirectoryEntry ode 
= rootfolder.Children.Find(dir.Name,"IIsWebVirtualDir");  

UpdateDirInfo(ode,dir);  

}
  

else  

{  

throw new Exception("This virtual directory is not exists.");  

}
  

}
  

   

//删除一个虚拟目录  

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  

{  

throw new Exception("Can’’’’t delete " + strVirdir + ",because it isn’’’’t exists.");  

}
  

}
  

//批量更新  

public void UpdateBatch()  

{  

BatchUpdate(_virdirs);  

}
  

//重载一个:-)  

public void UpdateBatch(VirtualDirectories vds)  

{  

BatchUpdate(vds);  

}
  

   

///<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 e)  

{  

throw new Exception("Can’’’’t connect to the server ["+ _server +"",e);  

}
  

}
  

//执行批量更新  

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:  

Create(vd);  

break;  

case 2:  

Update(vd);  

break;  

}
  

}
  

_batchflag 
= false;  

}
  

//更新东东  

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();  

}
  



//获取虚拟目录集合  

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;  

}
  



}
  

/// <summary>  

/// VirtualDirectory类  

/// </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;  

/// <summary>  

/// 构造函数  

/// </summary>  


public VirtualDirectory()  

{  

SetValue();  

}
  

public VirtualDirectory(string strVirDirName)  

{  

_name 
= strVirDirName;  

SetValue();  

}
  

private void SetValue()  

{  

_read 
= true;_execute = false;_script = false;_ssl= false;_write=false;_authbasic=false;_authntlm=false;  

_indexed 
= false;_endirbrow=false;_endefaultdoc = false;  

_flag 
= 1;  

_defaultdoc 
= "default.htm,default.aspx,default.asp,index.htm";  

_path 
= "C:\\";  

_ausername 
= "";_auserpass ="";_name="";  

}
  

///<summary>  

///定义属性,IISVirtualDir太多属性了  

///我只搞了比较重要的一些,其它的大伙需要的自个加吧。  

///</summary>  




public int flag  

{  

getreturn _flag;}  

set{ _flag = value;}  

}
  

public bool AccessRead  

{  

getreturn _read;}  

set{ _read = value;}  

}
  

public bool AccessWrite  

{  

getreturn _write;}  

set{ _write = value;}  

}
  

public bool AccessExecute  

{  

getreturn _execute;}  

set{ _execute = value;}  

}
  

public bool AccessSSL  

{  

getreturn _ssl;}  

set{ _ssl = value;}  

}
  

public bool AccessScript  

{  

getreturn _script;}  

set{ _script = value;}  

}
  

public bool AuthBasic  

{  

getreturn _authbasic;}  

set{ _authbasic = value;}  

}
  

public bool AuthNTLM  

{  

getreturn _authntlm;}  

set{ _authntlm = value;}  

}
  

public bool ContentIndexed  

{  

getreturn _indexed;}  

set{ _indexed = value;}  

}
  

public bool EnableDirBrowsing  

{  

getreturn _endirbrow;}  

set{ _endirbrow = value;}  

}
  

public bool EnableDefaultDoc  

{  

getreturn _endefaultdoc;}  

set{ _endefaultdoc = value;}  

}
  

public string Name  

{  

getreturn _name;}  

set{ _name = value;}  

}
  

public string Path  

{  

getreturn _path;}  

set{ _path = value;}  

}
  

public string DefaultDoc  

{  

getreturn _defaultdoc;}  

set{ _defaultdoc = value;}  

}
  

public string AnonymousUserName  

{  

getreturn _ausername;}  

set{ _ausername = value;}  

}
  

public string AnonymousUserPass  

{  

getreturn _auserpass;}  

set{ _auserpass = value;}  

}
  

}
  

/// <summary>  

/// 集合VirtualDirectories  

/// </summary>  




public class VirtualDirectories : System.Collections.Hashtable  

{  

public VirtualDirectories()  

{  

}
  

//添加新的方法  

public VirtualDirectory Find(string strName)  

{  

return (VirtualDirectory)this[strName];  

}
  

}
  

}
posted on 2006-06-21 14:29  Ameng  阅读(210)  评论(0)    收藏  举报