65.9K
CodeProject is changing. Read more.
Home

Easy to learn Window Service

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.47/5 (10 votes)

Jun 11, 2012

CPOL

2 min read

viewsIcon

41067

Here we will talk about Windows NT services, which enable you to create a long-running executable application that runs in a separate Windows session.

Introduction

A Microsoft Windows service, formerly known as an 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 time. They can be performed easily using a Windows service.

Benefits of a Window Service 

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

Steps to create a Windows service

  1. Create a Windows Service Project using Visual Studio
  2. Create an Installer
  3. Deploy the Service
  4. Verify that the service works
  5. Un-install 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.
  2. Switch to code view, to start developing (Right Click -> View code).
  3. Let's start writing the code. Most services have timers implemented in them to perform a particular task at regular intervals in the background.
  4. 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");         
        } 
        private void 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 fileWritter = File.AppendText(@"d:\Log.txt");
            fileWritter.WriteLine(DateTime.Now.ToString() + " " + str);
            fileWritter.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. 

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:
  4. 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 password 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

Type 'Installutil /u <<Service Name>>.exe as given below:

C:\WINDOWS\Microsoft.NET\Framework\ v4.0.30319\InstallUtil.exe /u "Service1.exe"

Points of Interest   

It's very easy to learn how to write a Windows service but difficult to track errors.