/// <summary>
        /// Wmi query for IIsApplicationPool object.
        /// </summary>
        /// <param name="name">The AppPool name.</param>
        /// <param name="machineName">The server on which the AppPool is running.</param>
        /// <param name="millisecondsTimeout">Timeout value on ManagementOptions object.</param>
        /// <param name="options"></param>
        /// <returns>The Wmi AppPool ManagementObject</returns>
        static ManagementObject GetAppPoolManagementObject(string name, string machineName, int millisecondsTimeout, ref ManagementOptions options)
        {
            IisAppPoolUtilWmiHelper helper  = new IisAppPoolUtilWmiHelper(machineName);
            ManagementObject        appPool = helper.CreateManagementObject("IIsApplicationPool");

            appPool.Properties["Name"].Value = string.Format("W3SVC/AppPools/{0}", name);
            options.Timeout = System.TimeSpan.FromMinutes(Convert.ToDouble(millisecondsTimeout));

            return(appPool);
        }
        /// <summary>
        /// Wmi query for IIsApplicationPoolSetting for an AppPool.
        /// </summary>
        /// <param name="appPoolName">The AppPool name.</param>
        /// <param name="useWildcard">Uses a wildcard in searching for the AppPool by name ["%{0}%"].</param>
        /// <param name="machineName">The server on which the AppPool is running.</param>
        /// <returns>The Wmi ManagementObjectCollection for the AppPool.</returns>
        static ManagementObjectCollection GetAppPoolSettings(string appPoolName, bool useWildcard, string machineName)
        {
            if (useWildcard)
            {
                appPoolName = string.IsNullOrWhiteSpace(appPoolName) ? "%" : string.Format("%{0}%", appPoolName);
            }

            ObjectQuery query =
                new ObjectQuery(string.Format("SELECT * FROM IIsApplicationPoolSetting WHERE Name = 'W3SVC/AppPools/{0}'", appPoolName));
            IisAppPoolUtilWmiHelper helper = new IisAppPoolUtilWmiHelper(machineName);

            return(helper.Query(query, WmiPath.IIS));
        }
        /// <summary>
        /// Creates a new AppPool.
        /// </summary>
        /// <param name="name">The AppPool name.</param>
        /// <param name="machineName">The server on which the AppPool will be created.</param>
        /// <param name="millisecondsTimeout">Timeout value on wait for Create to complete.</param>
        /// <returns>The Wmi ManagementPath</returns>
        public static ManagementPath Create(string name, string machineName, int millisecondsTimeout)
        {
            PutOptions options = new PutOptions();

            options.Timeout = System.TimeSpan.FromMinutes(Convert.ToDouble(millisecondsTimeout));

            IisAppPoolUtilWmiHelper helper  = new IisAppPoolUtilWmiHelper(machineName);
            ManagementObject        appPool = helper.CreateManagementObject("IIsApplicationPoolSetting");

            appPool.Properties["Name"].Value = string.Format("W3SVC/AppPools/{0}", name);
            appPool.Properties["AppPoolIdentityType"].Value   = 3;
            appPool.Properties["ManagedRuntimeVersion"].Value = "v4.0";

            return(appPool.Put(options));
        }