zoukankan      html  css  js  c++  java
  • 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 name="strServer">主机名称</param>

            
    public IISManager(string strServer)
            {
                _server 
    = strServer;
                _website 
    = "1";
                _batchflag 
    = false;
            }
            
    /// <summary>

            
    /// 生成一个新的站点

            
    /// </summary>

            
    /// <param name="webSiteName">站点名称</param>

            
    /// <param name="pathToRoot">物理地址</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 name="strServer"></param>

            
    /// <param name="strWebSite"></param>

            
    public void Connect(string strServer, string strWebSite)
            {
                _server 
    = strServer;
                _website 
    = strWebSite;
                ConnectToServer();
            }
            
    /// <summary>

            
    /// 判断是否存这个虚拟目录

            
    /// </summary>

            
    /// <param name="strVirdir"></param>

            
    /// <returns></returns>

            
    public bool Exists(string strVirdir)
            {
                
    return _virdirs.Contains(strVirdir);
            }

            
    /// <summary>

            
    /// 添加一个虚拟目录

            
    /// </summary>

            
    /// <param name="newdir">虚拟目录的实例</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 name="strVirdir"></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 name="dir"></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 name="strVirdir"></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 name="sVirDirName">虚拟目录的名字</param>

            
    public VirtualDirectory(string sVirDirName)
            {
                SetValue();
                _name 
    = sVirDirName;
            }
            
    /// <summary>

            
    /// 构造函数

            
    /// </summary>

            
    /// <param name="sVirDirName">虚拟路径</param>

            
    /// <param name="strPhyPath">物理路径</param>

            
    /// <param name="AnonymousUser">匿名用户名和密码</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();

  • 相关阅读:
    Python3基础 list [] 创建空列表
    Python3基础 list [] 创建整数列表
    Python3基础 iter+next 进行迭代时超出了范围 产生StopIteration异常
    Python3基础 frozenset 使用list创建frozenset
    Python3基础 filter+lambda 筛选出1-20之间的奇数
    Python3基础 filter 第一个参数为NONE时 结果只返回为True的对象
    Python3基础 dict 推导式 生成10以内+奇数的值为True 偶数为False的字典
    Python3基础 dict 创建字典 空字典
    Python3基础 dict setdefault 根据键查找值,找不到键会添加
    Python3基础 dict pop 弹出指定键的项
  • 原文地址:https://www.cnblogs.com/craig/p/1288284.html
Copyright © 2011-2022 走看看