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
- Create a Windows Service Project using Visual Studio
- Create an Installer
- Deploy the Service
- Verify that the service works
- Un-install the service
Creating a Windows Service Project Using Visual Studio
- Open Visual Studio -> File -> New Project-> Visual C# -> Windows -> select Windows Service project and give it a meaningful name.
- Switch to code view, to start developing (Right Click -> View code).
- Let's start writing the code. Most services have timers implemented in them to perform a particular task at regular intervals in the background.
- 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
- 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.
- 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.
- Build this project. It will create an exe of this project.
Deploying Service
- Open the Visual Studio Command prompt from "Start ->All Programs->Microsoft Visual Studio 2010 ->Visual Studio Tools -> Visual Studio Command Prompt (2010)".
- Navigate to the folder where our 'Windows Service' application is compiled.
- 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 password in which the context service needs to run.
Verifying whether service works
- 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.
- 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.
I am a professional programmer with 5+ years of experience. Having a strong grasp over C# .NET/ASP.NET/MVC/WCF/WPF/MS SQL/ORACLE/BOOTSTRAP etc. I am equally efficient with Web based as well as Windows projects.