CSDN博客

img LuckyJan

IIS控制管理(Web虚拟目录的创建及管理)

发表于2004/3/9 10:22:00  1675人阅读

(一)CreateWebDir.cs 使用示例

????? string sServer = "localhost";
????? string VirtualDir = "Bug2004";?????????????????? //虚拟目录
????? string PathDir??? = @"D:/myWebDirTest/Bug2000"?? //物理目录

???IISManager iisMg = new IISManager(sServer);
???iisMg.Connect();
???
???if (iisMg.Exists(VirtualDir]))
???{
????Console.Write(VirtualDir+ " is exist!");
???}
???else
???{
????myINI.IniWriteValue("WebDir","WebDirExist","false");

????iisMg.get_AnonymousUser();
????string[] anonymousUser = new string[2];
????anonymousUser[0] = iisMg.AnonymousUserName ;
????anonymousUser[1] = iisMg.AnonymousUserPass ;

????VirtualDirectory newVirDir = new VirtualDirectory(VirtualDir,PathDir,anonymousUser);
????if (iisMg.Create(newVirDir))
?????Console.Write(VirtualDir+ " 创建成功!");
????else
?????Console.Write(VirtualDir+ " 创建不成功!");
???}

???iisMg.Close();

(二)CreateWebDir.cs 是转贴过来的,我作了些完善和修改

///***********************************************************
///**************??????????? ?? ?IIS控制管理类?????????????? ?**************
///************** 转贴自: 飞刀 http://www.aspcn.com *************
///***********************************************************
using System;
using System.Data;
using System.DirectoryServices;
using System.Collections;

namespace CreateWebDir
{
?///


?/// IISManager 的摘要说明。
?///

?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;
??}
??///
??/// 定义公共属性
??///

??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";
???}
??}
??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;}
??}
??///


??///定义公共方法
??///

??//连接服务器
??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(Exception ee)
????{
?????//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);
??}
 
??///


??///私有方法
??///

??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["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;
??}

?}
?///


?/// VirtualDirectory类
?///

?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;
??///
??/// 构造函数
??///

??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="";
??}
??///
??///定义属性,IISVirtualDir太多属性了
??///我只搞了比较重要的一些,其它的大伙需要的自个加吧。
??///

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


?/// 集合VirtualDirectories
?///

?public class VirtualDirectories : System.Collections.Hashtable
?{
??public VirtualDirectories()
??{
??}
??//添加新的方法
??public VirtualDirectory Find(string strName)
??{
???return (VirtualDirectory)this[strName];
??}
?}
}

0 0

相关博文

我的热门文章

img
取 消
img