【转】IIS管理类

it2022-05-09  22

using System; using System.Data; using System.DirectoryServices; using System.Collections; using System.Threading; namespace Aspnet.IISManagement {

        /// <summary>         /// 应用程序的主入口点。         /// </summary>         [STAThread]         static void Main(string[] args)         {             IISManager test = new IISManager();             test.Connect();             VirtualDirectory vd = new VirtualDirectory();             vd.Path = @"c:\Inetpub\wwwroot\BKDEIP\WEBUI\MobileFolder";             vd.Name = "BKDEIP/WEBUI/Mobile";

            //if(test.Exists(vd.Name))               //{             //test.Delete(vd.Name);             //}             //else             //{             //test.Create(vd);             //}             test.Create(vd);         }

        //定义需要使用的域         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         {             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 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;         }

        //更新一个虚拟目录,调用UpdateDirInfo()方法执行更新         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.aspx,default.htm,default.asp,index.aspx,index.htm";             _path = "C:\\";             _ausername = ""; _auserpass = ""; _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];         }     }

转载于:https://www.cnblogs.com/feima-lxl/archive/2008/03/17/1109084.html


最新回复(0)