🎩 Simple Windows Service helper (Topshelf-based, Azure Web Job capable)
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github
Topper target .net std 2 Jan 16, 2019
Toppertest
scripts
tools
.gitignore
CHANGELOG.md
CONTRIBUTING.md bam!!11 Mar 2, 2017
LICENSE.md
README.md
Topper.sln
appveyor.yml bam!!11 Mar 2, 2017

README.md

Topper

install from nuget

Generic Windows service host - makes an ordinary Console Application hostable in the following scenarios:

  • To be F5-debugged locally - on your developer machine
  • To be installed as a Windows Service - on the servers in your basement
  • To be executed as an Azure Web Job - in the cloud!!

Based on Topshelf. Exposes a drastically simplified API, where "services" are simply factories that return something IDisposable.

Targets .NET Standard 2.0, so you must target either netcoreapp2.0 (or later), or net462 (or later) in your Console Application.

Getting started

Create YourNewAwesomeWindowsService as a Console Application project targeting AT LEAST .NET 4.6.2 or .NET Core App 2.0.

Include the NuGet package 📦

Install-Package Topper -ProjectName YourNewAwesomeWindowsService

and clean up your Program.cs so it becomes nice like this: 🌻

namespace YourNewAwesomeWindowsService
{
    class Program
    {
        static void Main()
        {
                
        }
    }
}

and then you configure Topper by going

var configuration = new ServiceConfiguration()
	.Add(.. function that returns an IDisposable ..)
	.Add(.. another function that returns an IDisposable ..);

ServiceHost.Run(configuration);

in Main, which could look like this:

namespace YourNewAwesomeWindowsService
{
    class Program
    {
        static void Main()
        {
            var configuration = new ServiceConfiguration()
                .Add(() => new MyNewAwesomeService());

            ServiceHost.Run(configuration);                
        }
    }
}

🐵 Easy!

Topper uses LibLog ⚡️ to log things. If you want to use Serilog, you probably want to

Install-Package Serilog.Sinks.ColoredConsole -ProjectName YourNewAwesomeWindowsService

and configure the global 🌍 logger before starting your service:

namespace YourNewAwesomeWindowsService
{
    class Program
    {
        static void Main()
        {
            Log.Logger = new LoggerConfiguration()
                .WriteTo.ColoredConsole()
                .CreateLogger();

            var configuration = new ServiceConfiguration()
                .Add(() => new MyNewAwesomeService());

            ServiceHost.Run(configuration);                
        }
    }
}

And that is how you use Topper.

How to run locally?

Press F5 or CTRL+F5 in Visual Studio.

Run the .exe

How to run as Windows Service?

Open an elevated command prompt, and run the .exe with the install argument, like so:

C:\apps\YourApp> YourApp.exe install

and then some Windows Service Control 🚥 stuff will appear and tell you some details on how it was installed.

You can remove it again like this:

C:\apps\YourApp> YourApp.exe uninstall

Not exactly surprising. 👏

How to run as Azure Web Job?

Just run it as you would any other Console Application as a Continuous Web Job.

Topper automatically monitors for the presence of the WEBJOBS_SHUTDOWN_FILE, to be able to shut down gracefully and dispose your IDisposables. ♻️