IIS helper: is IIS Installed, IIS state, IIS version, : IIS « Windows « C# / C Sharp

Home
C# / C Sharp
1.2D Graphics
2.Class Interface
3.Collections Data Structure
4.Components
5.Data Types
6.Database ADO.net
7.Design Patterns
8.Development Class
9.Event
10.File Stream
11.Generics
12.GUI Windows Form
13.Language Basics
14.LINQ
15.Network
16.Office
17.Reflection
18.Regular Expressions
19.Security
20.Services Event
21.Thread
22.Web Services
23.Windows
24.Windows Presentation Foundation
25.XML
26.XML LINQ
C# / C Sharp by API
C# / CSharp Tutorial
C# / CSharp Open Source
C# / C Sharp » Windows » IISScreenshots 
IIS helper: is IIS Installed, IIS state, IIS version,
 
using System;
using System.Collections;
using System.Diagnostics;
using System.DirectoryServices;
using System.Management;
using System.Net;
using System.ServiceProcess;
using Microsoft.Web.Administration;
using Microsoft.Win32;

namespace harbar.net.Utils.APM
{
    internal static class Helper
    {
        #region Private Properties
        private static string _iisRegKey = @"Software\Microsoft\InetStp";
        private static string _metabasePath = @"IIS://localhost/w3svc/apppools";
        private static string _stsadmPath = Environment.GetEnvironmentVariable("commonprogramfiles"+ @"\Microsoft Shared\web server extensions\12\BIN\stsadm";
        private static string _wmiQuery = @"SELECT * FROM Win32_Process WHERE Name = 'w3wp.exe'";
        #endregion

        #region Public Methods

        // detects IIS6 and above
        public static bool IisInstalled()
        {
            try
            {
                using (RegistryKey iisKey = Registry.LocalMachine.OpenSubKey(_iisRegKey))
                {
                    return (int)iisKey.GetValue("MajorVersion">= 6;
                }
            }
            catch
            {
                return false;
            }
        }

        // returns status of web service
        public static string W3svcStatus()
        {
            try
            {
                using (ServiceController serviceController = new ServiceController("w3svc"))
                {
                    return serviceController.Status.ToString();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        // shim to prevent Assembly load failure on Windows 2003
        public static AppPools GetAppPools()
        {
            return IsIIS7() ? GetAppPoolsIIS7() : GetAppPoolsIIS6();
        }

        // shim to prevent Assembly load failure on Windows 2003
        public static ArrayList GetAppPoolNames()
        {
            return IsIIS7() ? GetAppPoolNamesIIS7() : GetAppPoolNamesIIS6();
        }

        // shim to prevent Assembly load failure on Windows 2003
        public static void RecycleAppPool(string name)
        {
            if (IsIIS7())
            {
                RecycleAppPoolIIS7(name);
            }
            else
            {
                RecycleAppPoolIIS6(name);
            }
        }

        // restarts an NT service using it's short name
        public static void RestartService(string name)
        {
            try
            {
                using (ServiceController serviceController = new ServiceController(name))
                {
                    serviceController.Stop();
                    serviceController.WaitForStatus(ServiceControllerStatus.Stopped);
                    serviceController.Start();
                    serviceController.WaitForStatus(ServiceControllerStatus.Running);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        // executes iisreset.exe
        public static void IisReset()
        {
            try
            {
                using (Process p = new Process())
                {
                    p.StartInfo.FileName = "iisreset.exe";
                    p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                    p.Start();
                    p.WaitForExit();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        // executes stsadm.exe with no arguments
        public static void ExecuteStsAdm()
        {
            try
            {
                using (Process p = new Process())
                {
                    p.StartInfo.FileName = _stsadmPath;
                    p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                    p.Start();
                    p.WaitForExit();
                }
            }
            catch (Exception ex)
            {
                if (ex.Message == "The system cannot find the file specified")
                {
                    throw new Exception("Could not find STSADM, SharePoint may not be installed.");
                }
                throw ex;
            }
        }

        // performs a HTTP GET for a given URL
        public static void HttpGet(string url)
        {
            try
            {
                WebRequest request = WebRequest.Create(url);
                request.Credentials = CredentialCache.DefaultCredentials;
                request.Method = "GET";
                using (WebResponse response = request.GetResponse())
                {
                    if (response.ContentLength <= 0)
                    {
                        throw new Exception("No content at " + url);
                    }
                    response.Close();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        // writes an application event log
        public static void WriteEvent(Exception ex)
        {
            string source = "APM2";
            string log = "Application";
            string entry = "An error occured in Application Pool Manager.\r\n\r\nMessage:\r\n" + ex.Message + "\r\n\r\nStackTrace:\r\n" + ex.StackTrace;
            if (!EventLog.SourceExists(source))
            {
                EventLog.CreateEventSource(source, log);
            }
            EventLog.WriteEntry(source, entry, EventLogEntryType.Error);
        }

        #endregion

        #region Private Methods

        // determines if IIS7 is installed
        private static bool IsIIS7()
        {
            try
            {
                using (RegistryKey iisKey = Registry.LocalMachine.OpenSubKey(_iisRegKey))
                {
                    return (int)iisKey.GetValue("MajorVersion"== 7;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        // uses WMI to get Process IDs (for legacy IIS6)
        private static string GetProcessIDs(string appPoolName)
        {
            string ret = null;
            try
            {
                using (ManagementObjectSearcher mos = new ManagementObjectSearcher("root\\CIMV2", _wmiQuery))
                {
                    foreach (ManagementObject mo in mos.Get())
                    {
                        if (mo["CommandLine"].ToString().Contains(appPoolName))
                        {
                            ret += mo["ProcessId"].ToString() ",";
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ret = null;
                throw ex;
            }
            return ret;
        }

        // translates state into string (for legacy IIS6)
        private static string GetAppPoolState(int state)
        {
            string ret = null;
            try
            {
                switch (state)
                {
                    case 1:
                        ret = "Starting";
                        break;
                    case 2:
                        ret = "Started";
                        break;
                    case 3:
                        ret = "Stopping";
                        break;
                    case 0:
                        ret = "Stopped";
                        break;
                    default:
                        ret = "Unknown";
                        break;
                }
            }
            catch (Exception ex)
            {
                ret = null;
                throw ex;
            }
            return ret;
        }

        // enumerates App Pools (using legacy IIS6 metabase)
        private static ArrayList GetAppPoolNamesIIS6()
        {
            ArrayList ret = new ArrayList();
            try
            {
                using (DirectoryEntry appPools = new DirectoryEntry(_metabasePath))
                {
                    foreach (DirectoryEntry ap in appPools.Children)
                    {
                        ret.Add(ap.Name);
                        ap.Dispose();
                    }
                }
            }
            catch (Exception ex)
            {
                ret = null;
                throw ex;
            }
            return ret;
        }

        // enumerates App Pools (using Microsoft.Web.Administration)
        private static ArrayList GetAppPoolNamesIIS7()
        {
            ArrayList ret = new ArrayList();
            try
            {
                using (ServerManager serverManager = new ServerManager())
                {
                    foreach (ApplicationPool ap in serverManager.ApplicationPools)
                    {
                        ret.Add(ap.Name);
                    }
                }
            }
            catch (Exception ex)
            {
                ret = null;
                throw ex;
            }
            return ret;
        }

        // enumerates App Pools and properties (using legacy IIS6 metabase)
        private static AppPools GetAppPoolsIIS6()
        {
            AppPools ret = new AppPools();
            try
            {
                using (DirectoryEntry appPools = new DirectoryEntry(_metabasePath))
                {
                    foreach (DirectoryEntry ap in appPools.Children)
                    {
                        AppPool item = new AppPool();
                        item.Name = ap.Name;
                        item.Status = GetAppPoolState((int)ap.Properties["AppPoolState"].Value);
                        item.Pids = GetProcessIDs(ap.Name);
                        ap.Dispose();
                        ret.Add(item);
                    }
                }
            }
            catch (Exception ex)
            {
                ret = null;
                throw ex;
            }
            return ret;
        }

        // enumerates App Pools and properties (using Microsoft.Web.Administration)
        private static AppPools GetAppPoolsIIS7()
        {
            AppPools ret = new AppPools();
            try
            {
                using (ServerManager serverManager = new ServerManager())
                {
                    foreach (ApplicationPool ap in serverManager.ApplicationPools)
                    {
                        AppPool item = new AppPool();
                        item.Name = ap.Name;
                        item.Status = ap.State.ToString();
                        foreach (WorkerProcess wp in ap.WorkerProcesses)
                        {
                            item.Pids += wp.ProcessId + ",";
                        }
                        ret.Add(item);
                    }
                }
            }
            catch (Exception ex)
            {
                ret = null;
                throw ex;
            }
            return ret;
        }

        // recylces app pool (using legacy IIS6 metabase)
        private static void RecycleAppPoolIIS6(string name)
        {
            try
            {
                using (DirectoryEntry appPool = new DirectoryEntry(string.Format(_metabasePath + @"/{0}", name)))
                {
                    appPool.Invoke("Recycle");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        // recylces app pool (using Microsoft.Web.Administration)
        private static void RecycleAppPoolIIS7(string name)
        {
            try
            {
                using (ServerManager serverManager = new ServerManager())
                {
                    ApplicationPool ap = serverManager.ApplicationPools[name];
                    ap.Recycle();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion
    }

    #region AppPool Wrappers

    internal class AppPool
    {
        private string _name;
        public string Name
        {
            get return _name; }
            set _name = value; }
        }

        private string _status;
        public string Status
        {
            get return _status; }
            set _status = value; }
        }

        private string _pids;
        public string Pids
        {
            get return _pids; }
            set _pids = value; }
        }


    }

    internal class AppPools : System.Collections.CollectionBase
    {
        public int Add(AppPool item)
        {
            return List.Add(item);
        }
        public void Insert(int index, AppPool item)
        {
            List.Insert(index, item);
        }
        public void Remove(AppPool item)
        {
            List.Remove(item);
        }
        public bool Contains(AppPool item)
        {
            return List.Contains(item);
        }
        public int IndexOf(AppPool item)
        {
            return List.IndexOf(item);
        }
        public void CopyTo(AppPool[] array, int index)
        {
            List.CopyTo(array, index);
        }
        public AppPool this[int index]
        {
            get return (AppPool)List[index]}
            set List[index= value; }
        }

    }

    #endregion
}

   
  
Related examples in the same category
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.