Introduction
For people that don't know what Topshelf is."Topshelf is a framework for hosting services written using the .NET framework.
The creation of services is simplified, allowing developers to create a simple console application that can be installed as a service using Topshelf.
The reason for this is simple: It is far easier to debug a console application than a service.
And once the application is tested and ready for production, Topshelf makes it easy to install the application as a service."
Source
This "Topshelf: Getting started guide" post will explain the basics and how to use Topshelf with:
Source code
You can find the source code of this post on: https://github.com/gergroen/Topshelf-getting-started-guidePost summary
Installing NuGet
First create a .Net core console project and install the next nuget packages.Create service class
Create a Service class. In this example the implementation has only log linesbut here you can add your own functionality for the windows service.
using Serilog; namespace Topshelf.GettingStarted { public class Service { public void Start() { Log.Information("Started"); } public void Stop() { Log.Information("Stopped"); } } }
Configure logging and windows service
Logging and the windows service are configured in the Program.Main.using System; using Serilog; namespace Topshelf.GettingStarted { class Program { static void Main(string[] args) { Log.Logger = new LoggerConfiguration() .WriteTo.Console() .WriteTo.File("log.txt", rollingInterval: RollingInterval.Day) .CreateLogger(); var rc = HostFactory.Run(x => { x.Service(s => { s.ConstructUsing(name => new Service()); s.WhenStarted(tc => tc.Start()); s.WhenStopped(tc => tc.Stop()); }); x.RunAsLocalSystem(); x.SetDescription("Topshelf Getting Started"); x.SetDisplayName("Topshelf.GettingStarted"); x.SetServiceName("Topshelf.GettingStarted"); x.UseSerilog(); }); var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode()); Environment.ExitCode = exitCode; } } }
This is the result when we run the console application. Image may be NSFW.
Clik here to view.

Control the windows service
To control the windows service we create the next batch files._install-service.bat
"%~dp0Topshelf.GettingStarted" install_start-service.bat
"%~dp0Topshelf.GettingStarted" start_stop-service.bat
"%~dp0Topshelf.GettingStarted" stop_uninstall-service.bat
"%~dp0Topshelf.GettingStarted" uninstallSet the "Copy to output directory" of the batch files to "Copy if newer".
The result
Now you can run _install-service.bat as Administrator to install the application as windows service.If you open the Services console you will see the application in the list. Image may be NSFW.
Clik here to view.

Useful links:
Source codeTopshelf documentation