Search code examples
c#.netiisiis-7iis-metabase

IIS 7 metabase: Setting the framework version and the managed pipeline mode programmatically


How can I set the ehe .net framework version and the managed pipeline mode programmatically for a IIS 7 programmatic via C#? What a the metabase property names for that?


Solution

  • You could use the Microsoft.Web.Administration assembly. Here's how you could set the framework version:

    using (var manager = new ServerManager())
    {
        // Get the web site given its unique id
        var site = manager.Sites.Cast<Site>().Where(s => s.Id == 1).FirstOrDefault();
        if (site == null)
        {
            throw new Exception("The site with ID = 1 doesn't exist");
        }
    
        // get the application you want to set the framework version to
        var application = site.Applications["/vDirName"];
        if (application == null)
        {
            throw new Exception("The virtual directory /vDirName doesn't exist");
        }
    
        // get the corresponding application pool
        var applicationPool = manager.ApplicationPools
            .Cast<Microsoft.Web.Administration.ApplicationPool>()
            .Where(appPool => appPool.Name == application.ApplicationPoolName)
            .FirstOrDefault();
        if (applicationPool == null)
        {
            // normally this should never happen
            throw new Exception("The virtual directory /vDirName doesn't have an associated application pool");
        }
    
        applicationPool.ManagedRuntimeVersion = "v4.0.30319";
        manager.CommitChanges();
    }
    

    And here's how to set the managed pipeline mode to integrated:

    using (var manager = new ServerManager())
    {
        // Get the application pool given its name
        var appPool = manager.ApplicationPools["AppPoolName"];
        if (appPool == null)
        {
            throw new Exception("The application pool AppPoolName doesn't exist");
        }
    
        // set the managed pipeline mode
        appPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;
    
        // save
        manager.CommitChanges();
    }