internal static bool CreateOrUpdateApplicationPool(ServerManager serverManager, string appPoolName, string clrConfigFilePath, out bool isAppPoolNew)
        {
            bool flag = false;

            isAppPoolNew = false;
            ApplicationPoolCollection      applicationPools = serverManager.ApplicationPools;
            ConfigurationElementCollection collection       = applicationPools.GetCollection();

            if (IISConfigurationUtilities.FindElement(collection, "add", "name", appPoolName) == null)
            {
                flag         = true;
                isAppPoolNew = true;
                applicationPools.Add(appPoolName);
            }
            ApplicationPool applicationPool = applicationPools[appPoolName];

            flag |= IISConfigurationUtilities.UpdateElementAttribute(applicationPool, "autostart", true);
            flag |= IISConfigurationUtilities.UpdateElementAttribute(applicationPool, "managedPipelineMode", "Integrated");
            flag |= IISConfigurationUtilities.UpdateElementAttribute(applicationPool, "managedRuntimeVersion", "v4.0");
            flag |= IISConfigurationUtilities.UpdateElementAttribute(applicationPool, "queueLength", 65535);
            flag |= IISConfigurationUtilities.UpdateElementAttribute(applicationPool.Failure, "rapidFailProtection", false);
            flag |= IISConfigurationUtilities.UpdateElementAttribute(applicationPool.ProcessModel, "identityType", "LocalSystem");
            flag |= IISConfigurationUtilities.UpdateElementAttribute(applicationPool.ProcessModel, "loadUserProfile", true);
            flag |= IISConfigurationUtilities.UpdateElementAttribute(applicationPool.ProcessModel, "idleTimeout", TimeSpan.FromSeconds(0.0));
            flag |= IISConfigurationUtilities.UpdateElementAttribute(applicationPool.ProcessModel, "pingingEnabled", false);
            flag |= IISConfigurationUtilities.UpdateElementAttribute(applicationPool.ProcessModel, "shutdownTimeLimit", TimeSpan.FromSeconds(5.0));
            flag |= IISConfigurationUtilities.UpdateElementAttribute(applicationPool.Recycling, "disallowOverlappingRotation", true);
            flag |= IISConfigurationUtilities.UpdateElementAttribute(applicationPool.Recycling.PeriodicRestart, "time", TimeSpan.FromSeconds(0.0));
            if (!string.IsNullOrEmpty(clrConfigFilePath))
            {
                flag |= IISConfigurationUtilities.UpdateElementAttribute(applicationPool, "CLRConfigFile", clrConfigFilePath);
                flag |= IISConfigurationUtilities.UpdateElementAttribute(applicationPool, "managedRuntimeLoader", string.Empty);
            }
            return(flag);
        }