Windows Service - Quick Catch Up


A Microsoft Windows service, formerly known as a NT service, enables you to create a long-running executable application that runs in a separate Windows session or we can configure the service to run in a user context other than a logged on user.

Generally some tasks are required to be scheduled or dependent on the time. So this can be performed easily using a Windows service.

Benefits of a Windows Service

  • It can be run automatically.
  • It would not require UserInteraction.
  • It runs in background.
  • Services can be automatically started when the computer is booted.
  • We have one place to look at to manage/reconfigure/monitor all of your services.

Here are the steps to create a Windows service quickly:

  1. Create a Windows Service Project Using Visual Studio
  2. Create an Installer
  3. Deploy the Service
  4. Verifying that the service works
  5. Un-installing the service

Creating a Windows Service Project Using Visual Studio

  1. Open Visual Studio -> File -> New Project-> Visual C# -> Windows -> select Windows Service project and give it a meaningful name.

    windows1.gif

    windows2.gif

  2. Switch to code view, to start developing (Right Click -> View code).
  3. Let's start write the code. Most of the services have timers implemented in them so as to perform a particular task at regular intervals in the background.

    windows3.gif

Here is the sample code. If the available amount of RAM exceeds 500 Mb then a message is written in the log file on a specified interval.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Timers;
using System.IO; 
namespace serverMonitor
{
    partial class Service1 : ServiceBase
    {
        privateTimer timer1 = null;
        public Service1()
        {
            InitializeComponent();
        } 
        protected override void OnStart(string[] args)
        {
            timer1 = newTimer();
            this.timer1.Interval = 30000;
            this.timer1.Elapsed += newSystem.Timers.ElapsedEventHandler(this.timer1_Tick);
            timer1.Enabled = true;
            Log("Service Started successfully");
        } 
        protected override void OnStop()
        {
            timer1.Enabled = false;
            Log("Service Stopped successfully");        
        } 
        privatevoid timer1_Tick(object sender, EventArgs e)
        {           
            serverMonitor();
        } 
        public static void serverMonitor()
        {
            try
            {               
                PerformanceCounter ramCounter;
                ramCounter = new PerformanceCounter("Memory", "Available MBytes");
                if(ramCounter.NextValue() > 500)
                Log("Amount of the available RAM :" + ramCounter.NextValue() + "Mb");            
            }
            catch (Exception ex)
            {
                Log("Error =" + ex.ToString());
            }
        } 
        public static void Log(string str)
        {
            StreamWriter Tex = File.AppendText(@"d:\Log.txt");
            Tex.WriteLine(DateTime.Now.ToString() + " " + str);
            Tex.Close();
        }
    }
}


Creating an Installer

  1. Now after the code is written successfully, it's time to install the service. For this you need to add the service installer to the project.
  2. Right-click any were in the Service1.cs file and select 'Add Installer'. Once we select, 'Add Installer', the Visual Studio IDE will automatically create "ProjectInstaller.cs" of this service.
  3. Build this project. It will create an exe of this project.

    windows4.gif

Deploying Service

  1. Open the Visual Studio Command prompt from "Start ->All Programs->Microsoft Visual Studio 2010 ->Visual Studio Tools -> Visual Studio Command Prompt (2010)".
  2. Navigate to the folder where our 'Windows Service' application is compiled.
  3. Type 'Installutil<<Service Name>>.exe as given below:
    C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe "Service1.exe"

Note: If we select the 'Account' type as 'User', the application will prompt for username and word in which the context service needs to run.

Verifying whether service works

  1. Once the service is installed successfully, you can see your service by going to Start -> Run ->"Services.msc"; you will see your service.You can test this service. Right-click on My Computer -> Computer Management ->Services->Select Service and Right Click -> Start.
  2. Then you will see the log file in 'd:\Log.txt" as we implemented in the service. It will generate a log every 30 seconds.

Un-installing the Service

  1. Type 'Installutil /u <<Service Name>>.exe as given below:
    C:\WINDOWS\Microsoft.NET\Framework\ v4.0.30319\InstallUtil.exe /u "Service1.exe"