zoukankan      html  css  js  c++  java
  • c#操作IIS的完整类

    using System;
    using System.Data;
    using System.DirectoryServices;
    using System.Collections;

    namespace DLL
    {
        /// 
        /// IISManager 的摘要说明。
        /// 
        public class IISManager
        {
            //定义需要使用的
            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;
            }

            /// 
            /// 定义公共属性
            /// 

            //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();
            }
            /// <summary>
            /// strServer为IIS服务器,strWebSite为
            /// </summary>
            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;
            }

            //更新一个虚拟目录
            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);
            }


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

            //连接服务器
            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 strVirDirName)
            {
                _name = strVirDirName;
                SetValue();
            }
            private void SetValue()
            {
                _read = true; _execute = false; _script = true; _ssl = false; _write = false; _authbasic = false; _authntlm = false;
                _indexed = false; _endirbrow = false; _endefaultdoc =true;
                _flag = 1;
                _defaultdoc = "default.aspx,default.htm,default.asp,index.htm";
                _path = "C:\\";
                _ausername = ""; _auserpass = ""; _name = "";
            }

            ///
            ///定义属性,IISVirtualDir太多属性了
            ///我只搞了比较重要的一些,其它的大伙需要的自个加吧。
            ///


            public int flag
            {
                get { return _flag; }
                set { _flag = value; }
            }
            /// <summary>
            /// 可读权限
            /// </summary>
            public bool AccessRead
            {
                get { return _read; }
                set { _read = value; }
            }
            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>
            /// 是否支持Script
            /// </summary>
            public bool AccessScript
            {
                get { return _script; }
                set { _script = value; }
            }
            /// <summary>
            /// 是否支持Basic
            /// </summary>
            public bool AuthBasic
            {
                get { return _authbasic; }
                set { _authbasic = value; }
            }
            /// <summary>
            /// 是否支持NTLM
            /// </summary>
            public bool AuthNTLM
            {
                get { return _authntlm; }
                set { _authntlm = value; }
            }
            /// <summary>
            /// 是否支持索引
            /// </summary>
            public bool ContentIndexed
            {
                get { return _indexed; }
                set { _indexed = value; }
            }
            /// <summary>
            /// 是否支持目录可浏览
            /// </summary>
            public bool EnableDirBrowsing
            {
                get { return _endirbrow; }
                set { _endirbrow = value; }
            }
            /// <summary>
            /// 是否支持缺省页
            /// </summary>
            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; }
            }
            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];
            }
        }
    }

  • 相关阅读:
    java中next()、nextInt()、nextLine()区别
    原码、反码、补码及移位运算
    微信小程序开发流程(适用于新手学习)
    Dubbo 常用的容错机制
    分布式系统性能注意点
    陌上人如玉,公子世无双!
    五步工作法
    四个凡是
    Javacpu 和内存问题排查步骤
    开启JMC功能
  • 原文地址:https://www.cnblogs.com/yeye518/p/2231669.html
Copyright © 2011-2022 走看看