`
hugh-lin
  • 浏览: 72922 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

[转]IIS虚拟目录控制类

阅读更多
using System;
using System.Data;
using System.DirectoryServices;
using System.Collections;
using System.IO;

namespace IISControl
{
    /**//// <summary>
    /// CreateWebDir 的摘要说明。
    /// </summary>
    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;
        }
        /**//// <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";
            }
        }
        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;}
        }
        /**////<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 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
                {
                    //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);
        }
 
        /**////<summary>
        ///私有方法
        ///</summary>

        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["AnonymousUserPass"][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 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="";
        }
        /**////<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];
        }
    }



    public class DirectoryInfos : System.Collections.CollectionBase
    {
        public int Add(DirectoryInfo di)
        {
            return this.List.Add(di);
        }

        public DirectoryInfo this[int index]
        {
            get{return (DirectoryInfo)List[index];}
        }

        public void AddCollection(DirectoryInfo[] dirs)
        {
            foreach(DirectoryInfo dir in dirs)
            {
                List.Add(dir);
            }
        }
    }

    public enum LogState
    {
        Success,
        Failed,
        Message
    }
}
分享到:
评论

相关推荐

    IIS虚拟目录控制类 源代码

    ### IIS 虚拟目录控制类概述 此源代码实现了一个名为 `IISManager` 的类,该类旨在为 Microsoft Internet Information Services (IIS) 提供管理和控制功能。通过这个类,开发者可以对 IIS 中的网站、应用程序和服务...

    IIS管理类-创建站点、虚拟目录,删除虚拟目录

    二、创建IIS虚拟目录 虚拟目录允许在不同物理路径下挂载一个逻辑目录,使得用户可以通过单一URL访问。创建虚拟目录的步骤如下: 1. 在IIS管理器中,找到已创建的站点,展开后找到“虚拟目录”。 2. 右键点击,选择...

    虚拟目录是什么作用--如何配置IIS设置虚拟目录

    虚拟目录,顾名思义,是在网络服务器上创建的一种逻辑上的目录结构,它并非物理存储在服务器上的实际目录,而是通过服务器软件(如IIS)映射到一个实际的物理路径。虚拟目录的主要作用在于提供了一种灵活的方式来...

    ASP.NET对IIS中的虚拟目录进行操作.rar

    例如,使用`ServerManager`类的`Sites`属性和`AddVirtualDirectory`方法可以编程实现虚拟目录的创建。 8. **自动化部署**:在持续集成和持续部署(CI/CD)环境中,这些操作经常被自动化,通过脚本或配置工具(如Web...

    IIS控制类,操作IIS管理类

    在.NET框架中,IIS(Internet Information Services)控制类提供了对IIS服务器进行管理和操作的能力。这类类通常属于System.Web.Administration命名空间,允许开发者通过编程方式创建、配置和管理IIS网站、应用程序...

    C#IIS创建网站和虚拟目录源码

    C#作为.NET框架的主要编程语言,可以与IIS进行深度集成,实现对IIS的管理和控制,例如创建网站和虚拟目录。本文将详细讲解如何利用C#来操作IIS,并基于提供的源码进行解析。 首先,我们了解下创建IIS网站的基本步骤...

    IIS管理器中的虚拟目录.pdf

    ### IIS管理器中的虚拟目录 #### 一、引言 在互联网技术中,IIS(Internet Information Services)作为微软提供的一种Web服务器解决方案,在企业级应用和服务中扮演着至关重要的角色。通过IIS,可以轻松地搭建和...

    C#动态创建WEB/FTP虚拟目录

    在Windows操作系统中,我们可以借助Windows Management Instrumentation(WMI)来管理和控制系统的各种配置,包括IIS(Internet Information Services)中的虚拟目录设置。 WMI是Microsoft提供的一个基础架构,允许...

    创建虚拟目录方法介绍

    - **安全隔离**:每个虚拟目录都有其自身的权限设置,可以实现细粒度的安全控制。 - **灵活性高**:虚拟目录可以指向任何磁盘位置的文件夹,提高了部署和迁移的灵活性。 #### 三、创建虚拟目录的步骤 接下来,我们...

    [基于ASP的主机域名类源码]WinIIS虚拟主机管理系统(附数据库).rar

    总结来说,【基于ASP的主机域名类源码]WinIIS虚拟主机管理系统(附数据库).rar是一个宝贵的教育资源,它涵盖了ASP开发、IIS管理、数据库应用等多个IT领域的知识点,对于学习和提升相关技能具有很高的价值。

    .NET2008实现,动态创建IIS站点

    2. 连接IIS服务器:使用DirectoryEntry类创建一个对象,指定IIS的根目录。例如: ``` DirectoryEntry iisManager = new DirectoryEntry("IIS://localhost/W3SVC"); ``` 3. 创建新站点:通过DirectoryEntry对象的...

    .Net中如何操作IIS的虚拟目录原理分析及实现方案

    .Net中实际上已经为我们在这方面做得很好了。... DirectoryEntries,它们为我们提供了访问活动目录的强大功能,在这些类允许我们操作IIS、LDAP、NDS以及WinNT,功能很强大的吧:) 不过我们此处只谈IIS的控制,一

    IIS实用程序来创建虚拟目录-高级

    在VB .NET 2.0环境下,开发者可以利用内置的ASP.NET功能或自定义的管理工具来创建IIS虚拟目录。描述中提到的“IIS实用程序”可能是一个专为简化此过程而设计的工具,它可以一键设置虚拟目录,同时包含额外的配置选项...

    IIS控制操作(C#)

    首先,要进行IIS控制操作,你需要引入`System.DirectoryServices`和`System.DirectoryServices.AccountManagement`这两个命名空间,它们包含了与IIS交互所需的类和方法。例如,`DirectoryEntry`类可以代表IIS管理...

    dotnet对虚拟目录的操作

    1. **创建虚拟目录**:在IIS中,可以右键点击网站,选择“添加虚拟目录”,然后设置别名(即虚拟目录的名称)和物理路径(指向实际文件所在的目录)。在代码层面,可以使用`System.Web.Configuration`命名空间下的`...

    C#实现创建,删除,查找,配置虚拟目录实例详解

    通过使用`System.DirectoryServices`命名空间,开发者可以实现对IIS的精细控制,包括创建、删除、查找和定制虚拟目录,以满足Web应用程序的需求。在实际开发中,确保正确处理异常和日志记录是非常重要的,以保证系统...

    IIS6.0 IIS,互联网信息服务

    转到“目录安全性”窗口,单击“IP地址及域名限制”下的“编辑”按钮,点选中“授权访问”以能接受客户端从本机之外的地方对IIS进行管理;最后单击“确定”按钮。 3.则在任意计算机的浏览器中输入如...

    iisadmin中的iisadmin.dll iisadmin.mfl iisadmin.mof

    它包含了IISAdmin服务的核心功能,比如配置服务器、启动和停止网站、管理虚拟目录等。`iisadmin.dll`在系统中注册为一个服务,通过COM接口与IIS管理控制台和其他管理系统进行交互。当用户通过IIS管理器进行操作时,...

    IIS服务器安装与配置

    1. **删除不必要的虚拟目录**: 删除默认安装的一些虚拟目录,如 `IISHelp`、`IISAdmin` 等,这些目录通常包含示例页面和脚本,对于实际应用来说并无太大价值,反而可能成为安全隐患。 2. **移除潜在危险的 IIS 组件*...

    IIS自动绑定子目录过滤器 Delphi开发的DLL源码.rar

    IIS自动绑定子目录过滤器,Delphi开发的DLL源码,关于本类库:免费开源,欢迎采用软件及源码部分片段,注意上图中红色部分,该源码编译完成后为DLL文件,无界面。 V0.1、首次进行内部测试,使用ini文件进行子...

Global site tag (gtag.js) - Google Analytics