阅读文章

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

[日期:2008-04-11] 来源:  作者: [字体: ]

     我在在部署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  


阅读:
录入:blue1000

评论 】 【 推荐 】 【 打印
上一篇:《WF编程》系列之40 - 自定义活动:活动的执行
下一篇:标准当然是好事情
相关文章      
本文评论
发表评论


点评: 字数
姓名:

  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款