• IIS虚拟目录控制类


    轉自:http://www.netfocus.cn/peoplearticle941.html

    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
            {
                
    getreturn _AnonymousUserName;}
                
    set{ _AnonymousUserName = value;}
            }
            
    public string AnonymousUserPass
            {
                
    getreturn _AnonymousUserPass;}
                
    set{ _AnonymousUserPass = value;}
            }
            
    //Server属性定义访问机器的名字,可以是IP与计算名
            public string Server
            {
                
    getreturn _server;}
                
    set{ _server = value;}
            }
            
    //WebSite属性定义,为一数字,为方便,使用string 
            
    //一般来说第一台主机为1,第二台主机为2,依次类推
            public string WebSite
            {
                
    getreturn _website; }
                
    set{ _website = value; }
            }

            
    //虚拟目录的名字
            public VirtualDirectories VirDirs
            {
                
    getreturn _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
            {
                
    getreturn _flag;}
                
    set{ _flag = value;}
            }
            
    public bool AccessRead
            {
                
    getreturn _read;}
                
    set{ _read = value;}
            }
            
    public bool AccessWrite
            {
                
    getreturn _write;}
                
    set{ _write = value;}
            }
            
    public bool AccessExecute
            {
                
    getreturn _execute;}
                
    set{ _execute = value;}
            }
            
    public bool AccessSSL
            {
                
    getreturn _ssl;}
                
    set{ _ssl = value;}
            }
            
    public bool AccessScript
            {
                
    getreturn _script;}
                
    set{ _script = value;}
            }
            
    public bool AuthBasic
            {
                
    getreturn _authbasic;}
                
    set{ _authbasic = value;}
            }
            
    public bool AuthNTLM
            {
                
    getreturn _authntlm;}
                
    set{ _authntlm = value;}
            }
            
    public bool ContentIndexed
            {
                
    getreturn _indexed;}
                
    set{ _indexed = value;}
            }
            
    public bool EnableDirBrowsing
            {
                
    getreturn _endirbrow;}
                
    set{ _endirbrow = value;}
            }
            
    public bool EnableDefaultDoc
            {
                
    getreturn _endefaultdoc;}
                
    set{ _endefaultdoc = value;}
            }
            
    public string Name
            {
                
    getreturn _name;}
                
    set{ _name = value;}
            }
            
    public string Path
            {
                
    getreturn _path;}
                
    set{ _path = value;}
            }
            
    public string DefaultDoc
            {
                
    getreturn _defaultdoc;}
                
    set{ _defaultdoc = value;}
            }
            
    public string AnonymousUserName
            {
                
    getreturn _ausername;}
                
    set{ _ausername = value;}
            }
            
    public string AnonymousUserPass
            {
                
    getreturn _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
        }

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    程序员要善于在工作中找到偷懒的办法
    关于count(1) 和 count(*)
    前端设计+程序开发那点事
    关于MySQL Connector/C++那点事儿
    windows下编译php5.2.17这是闹哪样?
    easyui使用时出现这个Uncaught TypeError: Cannot read property 'combo' of undefined
    视频文件自动转rtsp流
    Jenkins Pipeline如何动态的并行任务
    Jenkins的Dockerfile中如何批量迁移原Jenkins安装的插件
    Groovy中json的一些操作
  • 原文地址:https://www.cnblogs.com/Athrun/p/1004208.html
Copyright © 2020-2023  润新知