手动创建应用程序池,并自动将程序assign到新创建的池中(MSI制作)
2009-04-08 08:24:10 来源:WEB开发网我在在部署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:InetpubWwwroot"
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
更多精彩
赞助商链接