1. 程式人生 > >IIS控制管理(Web虛擬目錄的建立及管理)

IIS控制管理(Web虛擬目錄的建立及管理)

(一)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];
??}
?}
}