C#如何操作IIS,检查一个站点的虚拟目录是否存在?在虚拟目录下新建其他的虚拟目录及其对虚拟目录的修改和删除???不要让小妹被老板炒了啊!帮个忙哦!

解决方案 »

  1.   

    有个IISVirtualRoot类,不过不清楚怎么用
      

  2.   

    用javascript应该能做到尝试搜索AppCreate
      

  3.   

    ASP.NET对IIS中的虚拟目录进行操作 
    ------2004-6-17 9:22:15  //假如虚拟目录名为"Webtest",先在项目中引用 //System.DirectoryServices.dll,再using System.DirectoryServices;protected System.DirectoryServices.DirectoryEntry dirroot;1、添加新的虚拟目录     DirectoryEntry newVirDir = dirroot.Children.Add("Webtest","IIsWebVirtualDir");     newVirDir.Invoke("AppCreate",true);     newVirDir.CommitChanges();     dirroot.CommitChanges();2、更改虚拟目录属性    //虚拟目录的属性较常用的有:AccessRead,AccessWrite,AccessExecute,AccessScript,DefaultDoc,EnableDefaultDoc,Path等     DirectoryEntry Dirport = dirroot.Children.Find("Webtest","IIsVirtualDir");     Dirport .Properties["AccessRead"][0] = true; 3、删除虚拟目录      DirectoryEntry Dirport = dirroot.Children.Find("Webtest","IIsVirtualDir");      Dirport.Invoke("AppDelete",true);      dirroot.CommitChanges();或者:      object[] part = new object[2];     part[0] = "IIsWebVirtualDir";      part[1] = "Webtest";     dirroot.Invoke("Delete",part);     dirroot.CommitChanges();
      

  4.   

    一个IIS管理类 
    using System;using System.Data;using System.DirectoryServices;using System.Collections; namespace TestUrlRe{     /// <summary>     /// IISManager 的摘要说明。     /// </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(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.");              }         }
      

  5.   

             //批量更新         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["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;         }
         }请楼主回贴。。太长了。。些。因为有空行!
      

  6.   

         /// <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];         }     }}   调用方法:
                       string sServer = "localhost";                   string VirtualDir = "Bug2004";                   //虚拟目录                   string PathDir    = @"D:\myWebDirTest\Bug2000";   //物理目录                   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+ " 创建不成功!");                   }                    iisMg.Close(); 
    ----------------完----------------------
      

  7.   

    参考
    http://west-wind.com/weblog/posts/399.aspx
      

  8.   

    “//虚拟目录的属性较常用的有:AccessRead,AccessWrite,AccessExecute,AccessScript,DefaultDoc,EnableDefaultDoc,Path等

    不知道怎么查到所有可设置的属性的名称,比如虚拟目录里面有个属性是
    ASP.NET的版本,不知道怎么设置这个属性的值?