Want to know what Services or/and Processes are running currently on your PC? In one of my previous project I implemented small diagnostic utility which showed what processes and services are running on host box. Here is the example how to obtain this information.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
 
namespace ManagementInstrumentation
{
    class Program
    {
       
        static void Main(string[] args)
        {
            ListServices();
            Console.ReadLine();
            ListProcesses();
            Console.ReadLine();
        }
 
 
        private static void ListServices()
        {
            ManagementScope scope = newManagementScope();
            System.Management.ObjectQuery query = new ObjectQuery("select * from Win32_Service");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
            foreach(ManagementBaseObject o in searcher.Get())
            {
                Console.WriteLine("Service {0} is started = {1}", o["Name"], o["Started"]);
                foreach (var prop in o.Properties)
                {
                    Console.WriteLine("{0} = {1}", prop.Name, prop.Value);
                }
            }
        }
 
 
        private static void ListProcesses()
        {
 
            ManagementScope scope = new ManagementScope();
            System.Management.ObjectQuery query = new ObjectQuery("select * from Win32_Process");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
            foreach (ManagementBaseObject o in searcher.Get())
            {
                Console.WriteLine("Properties for Process {0}", o["Name"]);
                foreach (var prop in o.Properties)
                {
                    Console.WriteLine("{0} = {1}", prop.Name, prop.Value);
                }
               
            }
        }
        //In this method I want to list just running services
        //I'm using LINQ query to select started services
        private static void ListRunningServices()
        {
            ManagementScope scope = new ManagementScope();
            System.Management.ObjectQuery query = new ObjectQuery("select * from Win32_Service");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
            var services = searcher.Get();
 
            var started = fromManagementBaseObject s in services
                          fromPropertyData p in s.Properties
                          where p.Name == "Started" && p.Value.ToString().ToLower() == "true"
                          select s;
            foreach (var o in started)
            {
                Console.WriteLine("Service {0} is started ", o["Name"]);
            }
        }
    }
}
 

 

//Happy Coding