public int?GetWorkerProcessId()
 {
     using (var serverManager = new Microsoft.Web.Administration.ServerManager())
     {
         // find the worker process.
         foreach (WorkerProcess proc in serverManager.WorkerProcesses)
         {
             if (proc.AppPoolName.ToLowerInvariant() == AppPoolName.ToLowerInvariant())
             {
                 return(proc.ProcessId);
             }
         }
         return(null);
     }
 }
        static void BuildRunningAppPoolProcessesList()
        {
            var proc = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName               = @"c:\windows\system32\inetsrv\appcmd.exe",
                    Arguments              = "list wp",
                    UseShellExecute        = false,
                    RedirectStandardOutput = true,
                    CreateNoWindow         = true
                }
            };

            try
            {
                proc.Start();
            }
            catch (Exception exc)
            {
                Console.ForegroundColor = errorColor;
                Console.WriteLine("\nAn exception has occured while getting the application pool list.");
                Console.WriteLine(exc.Message);
                Console.WriteLine("\nPlease make sure that you are running in elevated command prompt and if the IIS is running.");
                Console.ForegroundColor = defaultForegroundColor;
            }
            int numberOfAppPoolsRunning = 0;

            string[] appPoolDetails;
            int      AppPoolProcId;
            string   AppPoolName;
            string   AppPoolProcessorArchitecture = null;

            AppPoolProcessList = new Dictionary <int, string>();

            while (!proc.StandardOutput.EndOfStream)
            {
                string line = proc.StandardOutput.ReadLine();
                if (!string.IsNullOrEmpty(line))
                {
                    if (!line.StartsWith("ERROR"))
                    {
                        appPoolDetails = line.Split(new char[] { ' ' }, 3);

                        AppPoolProcId = Convert.ToInt32(appPoolDetails[1].Replace("\"", ""));
                        AppPoolName   = appPoolDetails[2].Replace("(applicationPool:", "");
                        AppPoolName   = AppPoolName.Substring(0, AppPoolName.Length - 1);

                        Process wp = Process.GetProcessById(AppPoolProcId);
                        AppPoolProcessorArchitecture = wp.StartInfo.EnvironmentVariables["PROCESSOR_ARCHITECTURE"];
                        //

                        ApplicationPoolDetails appPool = new ApplicationPoolDetails();
                        appPool.processId             = AppPoolProcId;
                        appPool.appPoolName           = AppPoolName;
                        appPool.processorArchitecture = AppPoolProcessorArchitecture;

                        AppPoolProcessList.Add(AppPoolProcId, AppPoolName);

                        numberOfAppPoolsRunning++;
                    }
                    else
                    {
                        Console.WriteLine("WAS is not running or you are not running in an elevated command prompt.");
                        Environment.Exit(-1);
                    }
                }
            }
        }