ASP.NET虚拟主机安全漏洞解决方案(3)

发表于:2007-06-30来源:作者:点击数: 标签:
操作iis应用程序池 using System; using System.DirectoryServices; using System.Reflection; namespace ADSI1 { /// /// Small class containing methods to configure IIS. /// class ConfigIIS { /// /// The main entry point for the application. ///
     操作iis应用程序池
  
  using System;
  using System.DirectoryServices;
  using System.Reflection;
  
  namespace ADSI1
  {
   ///
   /// Small class containing methods to configure IIS.
   ///
   class ConfigIIS
   {
    ///
    /// The main entry point for the application.
    ///
    [STAThread]
    //主程序入口,可以选择用哪些,我为了方便,全部功能都写上去了。
    static void Main(string[] args)
    {
     string AppPoolName = "MyAppPool";
     string newvdir1 = "MyVDir";
     DirectoryEntry newvdir = CreateVDir(newvdir1);
  
     CreateAppPool(AppPoolName);
     AssignAppPool(newvdir, AppPoolName);
  
     ConfigAppPool("Stop",AppPoolName);
    }
  
    //创建虚拟目录
    static DirectoryEntry CreateVDir (string vdirname)
    {
     DirectoryEntry newvdir;
     DirectoryEntry root=new DirectoryEntry("IIS://localhost/W3SVC/1/Root");
     newvdir=root.Children.Add(vdirname, "IIsWebVirtualDir");
     newvdir.Properties["Path"][0]= "c:\\.netpub\\wwwroot";
     newvdir.Properties["AccessScript"][0] = true;
     newvdir.CommitChanges();
     return newvdir;
    }
  
    //创建新的应用程序池。
    static void CreateAppPool(string AppPoolName)
    {
     DirectoryEntry newpool;
     DirectoryEntry apppools=new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
     newpool=apppools.Children.Add(AppPoolName, "IISAPplicationPool");
     newpool.CommitChanges();
    }
  
    static void AssignAppPool(DirectoryEntry newvdir, string AppPoolName)
    {
     object[] param={0, AppPoolName, true};
     newvdir.Invoke("AppCreate3", param);
    }
  
    //method是管理应用程序池的方法,有三种Start、Stop、Recycle,而AppPoolName是应用程序池名称
    static void ConfigAppPool(string method,string AppPoolName)
    {
     DirectoryEntry appPool = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
     DirectoryEntry findPool = appPool.Children.Find(AppPoolName,IIsApplicationPool");
     findPool.Invoke(method,null);
     appPool.CommitChanges();
     appPool.Close();
    }
  
    //应用程序池的列表
    static void AppPoolList()
    {
     DirectoryEntry appPool = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
     foreach(DirectoryEntry a in appPool.Children)
     {
      Console.WriteLine(a.Name);
     }
    }
  
    private void VDirToAppPool()
    {
     DirectroryEntry VD = new DirectoryEntry("IIS://localhost/W3SVC/1/ROOT/ccc");
     Console.WriteLine(VD.Properties["AppPoolId"].Value.ToString());
    }
   }
  }
  
  
  
  
  

原文转自:http://www.ltesting.net