[转]IIS的完整控制类
using System;
using System.Data;
using System.DirectoryServices;
using System.Collections;
namespace CreateWebDir
{???
/// <summary>???
// IISManager 的摘要說明。??
/// </summary>
public class IISManager
{???????
?//定義需要使用的???????
?private string _server, _website, _AnonymousUserPass, _AnonymousUserName;???????
?private VirtualDirectories _virdirs;???????
?protected System.DirectoryServices.DirectoryEntry rootfolder;???????
?private bool _batchflag;???????
?/// <summary>???????
?/// 默認情況下使用localhost,即訪問本地機???????
?/// </summary>???????
?public IISManager()???????
?{???????????
??_server = "localhost";
??_website = "1";
??_batchflag = false;
?}???????
?/// <summary>
?///????????
?/// </summary>
?/// <param>主機名稱</param>
?public IISManager(string strServer)
?{???????????
??_server = strServer;
??_website = "1";
??_batchflag = false;
?}???????
?/// <summary>
?/// 生成一個新的站點
?/// </summary>
?/// <param>站點名稱</param>
?/// <param>物理地址</param>
?/// <returns></returns>
?public int CreateWebSite(string webSiteName, string pathToRoot)
?{???????????
??DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC");
??// Find unused ID value for new web site
??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;
????}
???}
??}
??// Create web site
??DirectoryEntry site = (DirectoryEntry) root.Invoke("Create", "IIsWebServer", siteID);
??site.Invoke("Put", "ServerComment", webSiteName);
??site.Invoke("Put", "KeyType", "IIsWebServer");
??site.Invoke("Put", "ServerBindings", ":80:");
??site.Invoke("Put", "ServerState", 2);
??site.Invoke("Put", "FrontPageWeb", 1);
??site.Invoke("Put", "DefaultDoc", "Default.aspx");
??site.Invoke("Put", "SecureBindings", ":443:");
??site.Invoke("Put", "ServerAutoStart", 1);
??site.Invoke("Put", "ServerSize", 1);
??site.Invoke("SetInfo");
??// Create application virtual directory
??DirectoryEntry siteVDir = site.Children.Add("Root", "IISWebVirtualDir");
??siteVDir.Properties["AppIsolated"][0] = 2;
??siteVDir.Properties["Path"][0] = pathToRoot;
??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();
??return siteID;
?}???????
?/// <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 string AnonymousUserName
?{
??get { return _AnonymousUserName; }
??set { _AnonymousUserName = value; }
?}
?/// <summary>
?/// 匿名用戶密碼
?/// </summary>
?public string AnonymousUserPass
?{
??get { return _AnonymousUserPass; }
??set { _AnonymousUserPass = value; }
?}???????
?/// <summary>
?/// Server屬性定義訪問機器的名字,可以是IP與計算名
?/// </summary>
?public string Server
?{
??get { return _server; }
??set { _server = value; }
?}
?/// <summary>
?/// WebSite屬性定義,為一數字,為方便,使用string
?/// 一般來說第一臺主機為1,第二臺主機為2,依次類推
?/// </summary>
?public string WebSite
?{
??get { return _website; }
??set { _website = value; }
?}
?/// <summary>
?/// 虛擬目錄的名字
?/// </summary>
?public VirtualDirectories VirDirs
?{
??get { return _virdirs; }
??set { _virdirs = value; }
?}
?///<summary>
?///定義公共方法
?///</summary>
?/// <summary>
?/// 連接服務器
?/// </summary>
?public void Connect()
?{
??ConnectToServer();
?}
?/// <summary>
?/// 為方便重載
?/// </summary>
?public void Connect(string strServer)
?{
??_server = strServer;
??ConnectToServer();
?}
?/// <summary>
?/// 為方便重載
?/// </summary>
?/// <param></param>
?/// <param></param>
?public void Connect(string strServer, string strWebSite)
?{
??_server = strServer;
??_website = strWebSite;
??ConnectToServer();
?}
?/// <summary>
?/// 判斷是否存這個虛擬目錄
?/// </summary>
?/// <param></param>
?/// <returns></returns>
?public bool Exists(string strVirdir)
?{
??return _virdirs.Contains(strVirdir);
?}
?/// <summary>
?/// 添加一個虛擬目錄
?/// </summary>
?/// <param>虛擬目錄的實例</param>
?/// <returns></returns>
?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.");
??}
?}
?/// <summary>
?/// 得到一個虛擬目錄
?/// </summary>
?/// <param></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("This virtual directory is not exists");
??}
??return tmp;
?}
?/// <summary>
?/// 更新一個虛擬目錄
?/// </summary>
?/// <param></param>
?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.");
??}
?}
?/// <summary>
?/// 刪除一個虛擬目錄
?/// </summary>
?/// <param></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
??{
???//throw new Exception("Can''t delete " + strVirdir + ",because it isn''t exists.");
??}
?}
?/// <summary>
?/// 批量更新
?/// </summary>
?public void UpdateBatch()
?{
??BatchUpdate(_virdirs);
?}
?//重載一個:-)
?public void UpdateBatch(VirtualDirectories vds)
?{
??BatchUpdate(vds);
?}
?///<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 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.Properties["AppFriendlyName"][0] = vd.AppFriendlyName;
??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.AppFriendlyName = (string) de.Properties["AppFriendlyName"][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, _appfriendlyname;
??private int _flag;
??private string _defaultdoc;
??/// <summary>
??/// 構造函數
??/// </summary>
??public VirtualDirectory()
??{
???SetValue();
??}
??/// <summary>
??/// 構造函數
??/// </summary>
??/// <param>虛擬目錄的名字</param>
??public VirtualDirectory(string sVirDirName)
??{
???SetValue();
???_name = sVirDirName;
??}
??/// <summary>
??/// 構造函數
??/// </summary>
??/// <param>虛擬路徑</param>
??/// <param>物理路徑</param>
??/// <param>匿名用戶名和密碼</param>
??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:\\";
???_appfriendlyname = "";
???_ausername = "IUSR_DEVE-SERVER";
???_auserpass = "IUSR_DEVE-SERVER";
???_name = "";
??}
??///<summary>
??///定義屬性,IISVirtualDir太多屬性了
??///我只搞了比較重要的一些,其它的大伙需要的自個加吧。
??///</summary>
??/// <summary>
??/// 標志
??/// </summary>
??public int flag
??{
???get { return _flag; }
???set { _flag = value; }
??}
??/// <summary>
??/// 是否可讀
??/// </summary>
??public bool AccessRead
??{
???get { return _read; }
???set { _read = value; }
??}
??/// <summary>
??/// 是否可寫
??/// </summary>
??public bool AccessWrite
??{
???get { return _write; }
???set { _write = value; }
??}
??/// <summary>
??/// 是否可執行
??/// </summary>
??public bool AccessExecute
??{
???get { return _execute; }
???set { _execute = value; }
??}
??/// <summary>
??/// SSL驗證
??/// </summary>
??public bool AccessSSL
??{
???get { return _ssl; }
???set { _ssl = value; }
??}
??/// <summary>
??/// 是否允許腳本
??/// </summary>
??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; }
??}
??/// <summary>
??/// 是否可瀏覽
??/// </summary>
??public bool EnableDirBrowsing
??{
???get { return _endirbrow; }
???set { _endirbrow = value; }
??}
??public bool EnableDefaultDoc
??{
???get { return _endefaultdoc; }
???set { _endefaultdoc = value; }
??}
??/// <summary>
??/// 虛擬目錄的名字
??/// </summary>
??public string Name
??{
???get { return _name; }
???set { _name = value; }
??}
??/// <summary>
??/// 虛擬目錄的物理地址
??/// </summary>
??public string Path
??{
???get { return _path; }
???set { _path = value; }
??}
??/// <summary>
??/// 默認訪問首頁
??/// </summary>
??public string DefaultDoc
??{
???get { return _defaultdoc; }
???set { _defaultdoc = value; }
??}
??/// <summary>
??/// 匿名用戶名
??/// </summary>
??public string AnonymousUserName
??{
???get { return _ausername; }
???set { _ausername = value; }
??}
??/// <summary>
??/// 匿名用戶密碼
??/// </summary>
??public string AnonymousUserPass
??{
???get { return _auserpass; }
???set { _auserpass = value; }
??}
??/// <summary>
??/// 應用程序名稱
??/// </summary>
??public string AppFriendlyName
??{
???get { return _appfriendlyname; }
???set { _appfriendlyname = value; }
??}
?}
?/// <summary>
?/// 集合VirtualDirectories
?/// </summary>
?public class VirtualDirectories : System.Collections.Hashtable
?{
??public VirtualDirectories()
??{
??}
??//添加新的方法
??public VirtualDirectory Find(string strName)
??{
???return (VirtualDirectory) this[strName];
??}
?}
}
使用舉例:
string sServer = "localhost";
string VirtualDir = "vTest";
//虛擬目錄string PathDir = @"c:\\inetpub\\dlwang\\";
//物理目錄IISManager iisMg = new IISManager(sServer);
iisMg.Connect();
if (iisMg.Exists(VirtualDir))
{
?throw new Exception(VirtualDir + " is exist!");
}else
{
?VirtualDirectory newVirDir = new VirtualDirectory(VirtualDir);
?newVirDir.Path = PathDir;
?newVirDir.DefaultDoc = "Index.htm";
?newVirDir.AccessExecute = true;
?newVirDir.AccessScript = true;
?newVirDir.AccessWrite = false;
?newVirDir.AppFriendlyName = "vTestApp";
?if (!iisMg.Create(newVirDir))
??throw new Exception(VirtualDir + " 創建不成功!");}iisMg.Close();
?
轉載于:https://www.cnblogs.com/aooyu/archive/2010/02/02/1661560.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的[转]IIS的完整控制类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2010 本年度认证目标:坐沙发的熊
- 下一篇: 蚁族之痛:过年如过关