IIS虚拟目录控制类(网上找的)
using System;
using System.Data;
using System.DirectoryServices;
using System.Collections;
using System.IO;
namespace IISControl
{
/**/ /// <summary>
/// CreateWebDir 的摘要说明。
/// </summary>
public class IISManager
{
//定义需要使用的
private string _server,_website,_AnonymousUserPass,_AnonymousUserName;
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>
public void get_AnonymousUser()
{
_AnCOLOR: #8b0000">IUSR_DEVE-SERVER";
_AnCOLOR: #8b0000">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
{
_AnCOLOR: #8b0000">IUSR_DEVE-SERVER";
_AnCOLOR: #8b0000">IUSR_DEVE-SERVER";
}
}
public string AnonymousUserName
{
get { return _AnonymousUserName;}
set { _AnonymousUserName = value ;}
}
public string AnonymousUserPass
{
get { return _AnonymousUserPass;}
set { _AnonymousUserPass = value ;}
}
//Server属性定义访问机器的名字,可以是IP与计算名
public string Server
{
get { return _server;}
set { _server = value ;}
}
//WebSite属性定义,为一数字,为方便,使用string
//一般来说第一台主机为1,第二台主机为2,依次类推
public string WebSite
{
get { return _website; }
set { _website = value ; }
}
//虚拟目录的名字
public VirtualDirectories VirDirs
{
get { return _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 bool 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);
return true ;
}
catch
{
//throw new Exception(ee.ToString());
return false ;
}
}
else
{
return true ;
//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>
public void Close()
{
_virdirs.Clear();
_virdirs = null ;
rootfolder.Dispose();
}
//连接服务器
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["AnonymousUserPass "][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 sVirDirName)
{
SetValue();
_name = sVirDirName;
}
// sVirDirName:虚拟路径;
// strPhyPath: 物理路径( physics Path)
public VirtualDirectory(string sVirDirName,string strPhyPath,string [] AnonymousUser)
{
SetValue();
_name = sVirDirName;
_path = strPhyPath;
_ausername = AnonymousUser[0];
_auserpass = AnonymousUser[1];
}
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 = "default.htm,default.aspx,default.asp,index.htm ";
_path = "C:\\ ";
_ausername = "IUSR_DEVE-SERVER ";_auserpass ="IUSR_DEVE-SERVER ";_name="";
}
/**/ ///<summary>
///定义属性,IISVirtualDir太多属性了
///我只搞了比较重要的一些,其它的大伙需要的自个加吧。
///</summary>
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 ;}
}
}
/**/ /// <summary>
/// 集合VirtualDirectories
/// </summary>
public class VirtualDirectories : System.Collections.Hashtable
{
public VirtualDirectories()
{
}
//添加新的方法
public VirtualDirectory Find(string strName)
{
return (VirtualDirectory)this [strName];
}
}
public class DirectoryInfos : System.Collections.CollectionBase
{
public int Add(DirectoryInfo di)
{
return this .List.Add(di);
}
public DirectoryInfo this [int index]
{
get {return (DirectoryInfo)List[index];}
}
public void AddCollection(DirectoryInfo[] dirs)
{
foreach (DirectoryInfo dir in dirs)
{
List.Add(dir);
}
}
}
public enum LogState
{
Success,
Failed,
Message
}
}
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com