手动创建应用程序池,并自动将程序assign到新创建的池中(MSI制作)

我在在部署ASP.net应用程序的时候,在IIS中都是创建在默认的应用池当中.我们能否在部署的时候创建自己的应用池呢?
本文就带你一起创建自己的应用池!

  1  using  System;
  2  using  System.IO;
  3  using  System.DirectoryServices;
  4  using  System.Reflection;
  5  using  System.Runtime.InteropServices;
  6  using  System.Collections;
  7 
  8  namespace  System_DirectoryServices_DirectoryEntry_ConfigIIS
  9  {
 10     class  Program
 11    {
 12       static   void  Main( string [] args)
 13      {
 14 
 15 
 16 
 17  CreateAppPool( " IIS://Localhost/W3SVC/AppPools " " MyAppPool " );
 18 
 19 
 20 
 21  CreateVDir( " IIS://Localhost/W3SVC/1/Root " " MyVDir " " D:\\Inetpub\\Wwwroot " );
 22 
 23 
 24 
 25  AssignVDirToAppPool( " IIS://Localhost/W3SVC/1/Root/MyVDir " " MyAppPool " );
 26 
 27 
 28 
 29  }
 30 
 31 
 32 
 33  static   void  CreateAppPool( string  metabasePath,  string  appPoolName)
 34  {
 35     //   metabasePath is of the form "IIS: // <servername>/W3SVC/AppPools"
 36     //     for example "IIS: // localhost/W3SVC/AppPools" 
 37     //   appPoolName is of the form "<name>", for example, "MyAppPool"
 38    Console.WriteLine( " \nCreating application pool named {0}/{1}: " , metabasePath, appPoolName);
 39 
 40     try
 41    {
 42       if  (metabasePath.EndsWith( " /W3SVC/AppPools " ))
 43      {
 44        DirectoryEntry newpool;
 45        DirectoryEntry apppools  =   new  DirectoryEntry(metabasePath);
 46        newpool  =  apppools.Children.Add(appPoolName,  " IIsApplicationPool " );
 47        newpool.CommitChanges();
 48        Console.WriteLine( "  Done. " );
 49      }
 50       else
 51        Console.WriteLine( "  Failed in CreateAppPool; application pools can only be created in the */W3SVC/AppPools node. " );
 52    }
 53     catch  (Exception ex)
 54    {
 55      Console.WriteLine( " Failed in CreateAppPool with the following exception: \n{0} " , ex.Message);
 56    }
 57  }
 58 
 59 
 60 
 61  static   void  CreateVDir( string  metabasePath,  string  vDirName,  string  physicalPath)
 62  {
 63     //   metabasePath is of the form "IIS: // <servername>/<service>/<siteID>/Root[/<vdir>]"
 64     //     for example "IIS: // localhost/W3SVC/1/Root" 
 65     //   vDirName is of the form "<name>", for example, "MyNewVDir"
 66     //   physicalPath is of the form "<drive>:\<path>", for example, "C:\Inetpub\Wwwroot"
 67    Console.WriteLine( " \nCreating virtual directory {0}/{1}, mapping the Root application to {2}: " ,
 68        metabasePath, vDirName, physicalPath);
 69 
 70     try
 71    {
 72      DirectoryEntry site  =   new  DirectoryEntry(metabasePath);
 73       string  className  =  site.SchemaClassName.ToString();
 74       if  ((className.EndsWith( " Server " ))  ||  (className.EndsWith( " VirtualDir " )))
 75      {
 76        DirectoryEntries vdirs  =  site.Children;
 77        DirectoryEntry newVDir  =  vdirs.Add(vDirName, (className.Replace( " Service " " VirtualDir " )));
 78        newVDir.Properties[ " Path " ][ 0 =  physicalPath;
 79        newVDir.Properties[ " AccessScript " ][ 0 =   true ;
 80         //  These properties are necessary for an application to be created.
 81        newVDir.Properties[ " AppFriendlyName " ][ 0 =  vDirName;
 82        newVDir.Properties[ " AppIsolated " ][ 0 =   " 1 " ;
 83        newVDir.Properties[ " AppRoot " ][ 0 =   " /LM "   +  metabasePath.Substring(metabasePath.IndexOf( " / " , ( " IIS:// " .Length)));
 84 
 85        newVDir.CommitChanges();
 86 
 87        Console.WriteLine( "  Done. " );
 88      }
 89       else
 90        Console.WriteLine( "  Failed. A virtual directory can only be created in a site or virtual directory node. " );
 91    }
 92     catch  (Exception ex)
 93    {
 94      Console.WriteLine( " Failed in CreateVDir with the following exception: \n{0} " , ex.Message);
 95    }
 96  }
 97 
 98 
 99 
100  static   void  AssignVDirToAppPool( string  metabasePath,  string  appPoolName)
101  {
102     //   metabasePath is of the form "IIS: // <servername>/W3SVC/<siteID>/Root[/<vDir>]"
103     //     for example "IIS: // localhost/W3SVC/1/Root/MyVDir" 
104     //   appPoolName is of the form "<name>", for example, "MyAppPool"
105    Console.WriteLine( " \nAssigning application {0} to the application pool named {1}: " , metabasePath, appPoolName);
106 
107     try
108    {
109      DirectoryEntry vDir  =   new  DirectoryEntry(metabasePath);
110       string  className  =  vDir.SchemaClassName.ToString();
111       if  (className.EndsWith( " VirtualDir " ))
112      {
113         object [] param  =  {  0 , appPoolName,  true  };
114        vDir.Invoke( " AppCreate3 " , param);
115        vDir.Properties[ " AppIsolated " ][ 0 =   " 2 " ;
116        Console.WriteLine( "  Done. " );
117      }
118       else
119        Console.WriteLine( "  Failed in AssignVDirToAppPool; only virtual directories can be assigned to application pools " );
120    }
121     catch  (Exception ex)
122    {
123      Console.WriteLine( " Failed in AssignVDirToAppPool with the following exception: \n{0} " , ex.Message);
124    }
125  }
126 
127 
128 
129    }
130  }
131    
132   
133 

你可能感兴趣的:(手动创建应用程序池,并自动将程序assign到新创建的池中(MSI制作))