在打包的时候,创建应用程序池,并自动将程序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 on 2008-04-28 10:08  大斌锅  阅读(249)  评论(0编辑  收藏  举报