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

该程序使用System.DirectoryServices库在IIS中创建新的应用程序池和虚拟目录,并将虚拟目录分配给指定的应用程序池。通过MSI安装时,可以自动化这些配置步骤。
摘要由CSDN通过智能技术生成
using System;
using System.IO;
using System.DirectoryServices;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Collections;

namespace System_DirectoryServices_DirectoryEntry_ConfigIIS
{
  class Program
  {
    static void Main( string[] args)
    {


...
CreateAppPool( "IIS://Localhost/W3SVC/AppPools", "MyAppPool");


...
CreateVDir( "IIS://Localhost/W3SVC/1/Root", "MyVDir", "D://Inetpub//Wwwroot");


...
AssignVDirToAppPool( "IIS://Localhost/W3SVC/1/Root/MyVDir", "MyAppPool");


...
}


...
static void CreateAppPool( string metabasePath, string appPoolName)
{
  //  metabasePath is of the form "IIS://<servername>/W3SVC/AppPools"
  //    for example "IIS://localhost/W3SVC/AppPools"
  //  appPoolName is of the form "<name>", for example, "MyAppPool"
  Console.WriteLine( "/nCreating application pool named {0}/{1}:", metabasePath, appPoolName);

  try
  {
    if (metabasePath.EndsWith( "/W3SVC/AppPools"))
    {
      DirectoryEntry newpool;
      DirectoryEntry apppools = new DirectoryEntry(metabasePath);
      newpool = apppools.Children.Add(appPoolName, "IIsApplicationPool");
      newpool.CommitChanges();
      Console.WriteLine( " Done.");
    }
    else
      Console.WriteLine( " Failed in CreateAppPool; application pools can only be created in the */W3SVC/AppPools node.");
  }
  catch (Exception ex)
  {
    Console.WriteLine( "Failed in CreateAppPool with the following exception: /n{0}", ex.Message);
  }
}


...
static void CreateVDir( string metabasePath, string vDirName, string physicalPath)
{
  //  metabasePath is of the form "IIS://<servername>/<service>/<siteID>/Root[/<vdir>]"
  //    for example "IIS://localhost/W3SVC/1/Root"
  //  vDirName is of the form "<name>", for example, "MyNewVDir"
  //  physicalPath is of the form "<drive>:/<path>", for example, "C:/Inetpub/Wwwroot"
  Console.WriteLine( "/nCreating virtual directory {0}/{1}, mapping the Root application to {2}:",
      metabasePath, vDirName, physicalPath);

  try
  {
    DirectoryEntry site = new DirectoryEntry(metabasePath);
    string className = site.SchemaClassName.ToString();
    if ((className.EndsWith( "Server")) || (className.EndsWith( "VirtualDir")))
    {
      DirectoryEntries vdirs = site.Children;
      DirectoryEntry newVDir = vdirs.Add(vDirName, (className.Replace( "Service", "VirtualDir")));
      newVDir.Properties[ "Path"][0] = physicalPath;
      newVDir.Properties[ "AccessScript"][0] = true;
      // These properties are necessary for an application to be created.
      newVDir.Properties[ "AppFriendlyName"][0] = vDirName;
      newVDir.Properties[ "AppIsolated"][0] = "1";
      newVDir.Properties[ "AppRoot"][0] = "/LM" + metabasePath.Substring(metabasePath.IndexOf( "/", ( "IIS://".Length)));

      newVDir.CommitChanges();

      Console.WriteLine( " Done.");
    }
    else
      Console.WriteLine( " Failed. A virtual directory can only be created in a site or virtual directory node.");
  }
  catch (Exception ex)
  {
    Console.WriteLine( "Failed in CreateVDir with the following exception: /n{0}", ex.Message);
  }
}


...
static void AssignVDirToAppPool( string metabasePath, string appPoolName)
{
  //  metabasePath is of the form "IIS://<servername>/W3SVC/<siteID>/Root[/<vDir>]"
  //    for example "IIS://localhost/W3SVC/1/Root/MyVDir"
  //  appPoolName is of the form "<name>", for example, "MyAppPool"
  Console.WriteLine( "/nAssigning application {0} to the application pool named {1}:", metabasePath, appPoolName);

  try
  {
    DirectoryEntry vDir = new DirectoryEntry(metabasePath);
    string className = vDir.SchemaClassName.ToString();
    if (className.EndsWith( "VirtualDir"))
    {
      object[] param = { 0, appPoolName, true };
      vDir.Invoke( "AppCreate3", param);
      vDir.Properties[ "AppIsolated"][0] = "2";
      Console.WriteLine( " Done.");
    }
    else
      Console.WriteLine( " Failed in AssignVDirToAppPool; only virtual directories can be assigned to application pools");
  }
  catch (Exception ex)
  {
    Console.WriteLine( "Failed in AssignVDirToAppPool with the following exception: /n{0}", ex.Message);
  }
}


...
  }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值