CNET中国旗舰网站

ZDNet China | CNET科技资讯网 | 政府采购 | 行业网站联盟

Web虚拟目录:Asp.net实现IIS控制管理

ZDNet 软件频道    更新时间:2007-08-21作者:bitscn.com    来源:bitscn.com

本文关键词:   IIS  .NET  ASP  Web  

   CreateWebDir.cs 使用示例

     string sServer = "localhost";

     string VirtualDir = "Bug2004";          虚拟目录

     string PathDir  = @"D:myWebDirTestBug2000"  物理目录

  

    IISManager iisMg = new IISManager(sServer);

    iisMg.Connect();

   

    if (iisMg.Exists(VirtualDir]))

    {

    Console.Write(VirtualDir+ " is exist!");

    }

    else

    {

    myINI.IniWriteValue("WebDir","WebDirExist","false");

  

    iisMg.get_AnonymousUser();

    string[] anonymousUser = new string[2];

    anonymousUser[0] = iisMg.AnonymousUserName ;

    anonymousUser[1] = iisMg.AnonymousUserPass ;

  

    VirtualDirectory newVirDir = new VirtualDirectory(VirtualDir,PathDir,anonymousUser);

    if (iisMg.Create(newVirDir))

     Console.Write(VirtualDir+ " 创建成功!");

    else

     Console.Write(VirtualDir+ " 创建不成功!");

    } bitsCN.com中国网管联盟

  

    iisMg.Close();

  

  (二)CreateWebDir.cs 是转贴过来的,我作了些完善和修改

  ///***********************************************************

  using System;

  using System.Data;

  using System.DirectoryServices;

  using System.Collections;

  

  namespace CreateWebDir

  {

  ///

  /// IISManager 的摘要说明。

  ///

  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;

   }

   ///

   /// 定义公共属性

   ///

  

   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;}

   }

   ///

   ///定义公共方法

   ///

  

   //连接服务器

   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(Exception ee)

    {

     //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);

   }

   

   ///

   ///私有方法

   ///

  

   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

[an error occurred while processing this directive]