有没有办法使用c#在IIS管理器中创建应用程序池?

SCM*_*SCM 2 iis

任何人都可以使用C#帮助在IIS中创建应用程序池吗?

完成此操作后,如何再次使用C#将应用程序池分配给虚拟目录?

Kev*_*Kev 10

如果您使用的是IIS7:

要使用和设置.NET Framework版本(在本例中为v2.0)创建应用程序池,请执行以下操作:

using Microsoft.Web.Administration;
...

using(ServerManager serverManager = new ServerManager())
{
  ApplicationPool newPool = serverManager.ApplicationPools.Add("MyNewPool");
  newPool.ManagedRuntimeVersion = "v2.0";
  serverManager.CommitChanges();
}
Run Code Online (Sandbox Code Playgroud)

您应该添加一个Microsoft.Web.Administration.dll可以在以下位置找到的引用:

%SYSTEMROOT%\System32\InetSrv

要将虚拟目录分配给应用程序池(尽管我认为您的意思是应用程序):

using (ServerManager serverManager = new ServerManager())
{
  // Find Default Website
  Site site = serverManager.Sites.First(s => s.Id == 1);
  Application newApp = site.Applications.Add("/MyNewApp", 
                                               @"C:\inetpub\wwwroot\mynewapp");
  newApp.ApplicationPoolName = "MyNewPool";
  serverManager.CommitChanges();
}
Run Code Online (Sandbox Code Playgroud)

如果您使用的是IIS6:

using (DirectoryEntry appPools = 
                   new DirectoryEntry("IIS://localhost/W3SVC/AppPools"))
{
  using (DirectoryEntry newPool = appPools.Children.Add("MyNewPool", 
                                                    "IIsApplicationPool"))
  {
    // Just use NetworkService as pool account
    newPool.Properties["AppPoolIdentityType"].Value = 2;
    newPool.CommitChanges();
  }
}
Run Code Online (Sandbox Code Playgroud)

以下代码创建MyNewApp默认网站中调用的应用程序,并将其分配给MyNewPool我们使用上面的代码示例创建的应用程序池:

using (DirectoryEntry siteRoot = 
         new DirectoryEntry(@"IIS://Localhost/W3SVC/1/root"))
{
  using (DirectoryEntry newApp = 
          siteRoot.Children.Add("MyNewApp", "IIsWebVirtualDir"))
  {
    newApp.Properties["Path"].Value = @"C:\inetpub\wwwroot\mynewapp";
    newApp.Properties["AccessScript"][0] = true;
    newApp.Properties["AccessFlags"].Value = 513; // AccessScript | AccessRead
    newApp.Properties["AuthFlags"].Value = 7;// AuthAnonymous|AuthBasic|AuthNTLM
    newApp.Properties["AppIsolated"].Value = "2";
    newApp.Properties["AppRoot"].Value = 
                       newApp.Path.Replace("IIS://Localhost", "/LM");
    newApp.Properties["AppPoolId"].Value = "MyNewPool";
    newApp.Properties["AppFriendlyName"].Value = "MyNewApp";
    newApp.CommitChanges();
  }
}
Run Code Online (Sandbox Code Playgroud)

我在上述所有情况下都需要以管理员身份运行代码.

有关更多信息,请参阅

IIS7:

IIS 7配置参考
如何使用Microsoft.Web.Administration

IIS6:

使用System.DirectoryServices配置IIS
IIS程序管理参考
IIS元数据库属性