用c# 如何操作 iis 根目录

本文介绍了一个用于管理和操作IIS服务器的.NET类库。通过该类库可以实现远程连接IIS服务器、创建、更新和删除虚拟目录等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;  
using System.DirectoryServices;  
using System.Collections;  
namespace IISManagement
{  
 /// <summary>  
 /// IISManager 的摘要说明。  
 /// </summary>  
 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;  
  }  
  /// <summary>  
  /// 定义公共属性  
  /// </summary>  
  //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 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);  
  }  
  ///<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.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;  
  }  
 }  
 
 <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 strVirDirName)  
  {  
   _name = strVirDirName;  
   SetValue();  
  }  
  private void SetValue()  
  {  
   _read = true;_execute = false;_script = false;_ssl=

false;_write=false;_authbasic=false;_authntlm=false;  
   _indexed = false;_endirbrow=false;_endefaultdoc = false;  
   _flag = 1;  
   _defaultdoc = "default.htm,default.aspx,default.asp,index.htm";  
   _path = "C://";  
   _ausername = "";_auserpass ="";_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];  
  }  
 }  
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值