[转]在打包的时候,创建应用程序池,并自动将程序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 
posted @ 2010-03-05 17:42  AooYu  阅读(250)  评论(0编辑  收藏  举报