在打包的时候,创建应用程序池,并自动将程序assign到新创建的池中(MSI制作)

在打包的时候,创建应用程序池,并自动将程序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

你可能感兴趣的:(sign)