Sun. May 24th, 2020

Samir Daoudi's Technical Blog

SharePoint, Office 365, C#, .Net, SQL Server News, Tips, Ebooks, Events, Webinars ….etc

Create a Windows Service in C# or Convert your Console App to a Service

Today, I will explain how we can easily create a Windows Service in C#.

Context :

I had a C# Console App, which connects to NAV Sql Serve DB and pulls data from a pre-defined views into my ASP.Net Project.

Problem : 

I had to convert this C# Console App to a Windows Service.

Here are the simple steps.

1- Create a new Project

In your solution, select Add, and Click New Project

2- Select Windows Service (.net Framework) Template

3- Type your Project Name

4- add a service installer

At this stage, open the Service1.cs > right click > Add installer

This will create a ProjectInstaller.cs file for you, right click (or press F7) to switch to the code view.

PS: make sure you are on the ProjectInstaller.designer.cs instead of the ProjectInstaller.cs.

By default, the ProjectInstaller.designer.cs looks like this :

5- Define the service Title, description and account used to run you Service

In the ProjectInstaller.designer.cs, make sure you specify which account is used to run your service

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
this.serviceProcessInstaller1.Password = null;
this.serviceProcessInstaller1.Username = null;

And you service Name, Display Name, Description

this.serviceInstaller1.DisplayName = "TRAPS Service";
this.serviceInstaller1.Description = "This Service Connects to NAV Db and applies any modifications to the TRAPS DB";
this.serviceInstaller1.ServiceName = "Service1";

 

6- Your service’s code

Now you can use the pre-defined events in your Service.cs to implement your code.

You will have access to different events such as onstart, onstop, onElapsedTime.

Here is a simple example which outputs to a text file an entry every 5 seconds.

public partial class Service1: ServiceBase {  
        Timer timer = new Timer(); // name space(using System.Timers;)  
        public Service1() {  
            InitializeComponent();  
        }  
        protected override void OnStart(string[] args) {  
            WriteToFile("Service is started at " + DateTime.Now);  
            timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);  
            timer.Interval = 5000; //number in milisecinds  
            timer.Enabled = true;  
        }  
        protected override void OnStop() {  
            WriteToFile("Service is stopped at " + DateTime.Now);  
        }  
        private void OnElapsedTime(object source, ElapsedEventArgs e) {  
            WriteToFile("Service is recall at " + DateTime.Now);  
        }  
        public void WriteToFile(string Message) {  
            string path = AppDomain.CurrentDomain.BaseDirectory + "\\Logs";  
            if (!Directory.Exists(path)) {  
                Directory.CreateDirectory(path);  
            }  
            string filepath = AppDomain.CurrentDomain.BaseDirectory + "\\Logs\\ServiceLog_" + DateTime.Now.Date.ToShortDateString().Replace('/', '_') + ".txt";  
            if (!File.Exists(filepath)) {  
                // Create a file to write to.   
                using(StreamWriter sw = File.CreateText(filepath)) {  
                    sw.WriteLine(Message);  
                }  
            } else {  
                using(StreamWriter sw = File.AppendText(filepath)) {  
                    sw.WriteLine(Message);  
                }  
            }  
        }  
    }

 

7- Install your service

After you implement your service’s code, you need to build your project, and install the service using the InstallUtil.exe (utility), located in the .net framework install path.

Run PowerShell or CommandLine as an administrator

Position your shell in the .net folder

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319

Run the InstallUtil.exe with your service.exe path

InstallUtil.exe + Your copied path + \your service name + .exe

Leave a comment

Copyright © All rights reserved. | Newsphere by AF themes.
Show Buttons
Hide Buttons

Subscribe to Blog via Email

Enter your email address to subscribe to this blog and receive notifications of new posts by email.