Installing a Topshelf application as a Windows service
Solution 1:
Run your service.exe install
to install the service.
See the Topshelf Command Line Reference documentation for more information.
Solution 2:
- Start Visual Studio and create a new C# Console-Application
- Right click on references and go to manage NuGet-Packages
- Download and install Topshelf via NuGet
- Paste the Code below into your application and include all imports.
- Switch from “Debug” mode to “Release” and build the application.
- Run
cmd.exe
as administrator -
Navigate the console to
.\myConsoleApplication\bin\Release\
-
Run the command
.\myConsoleApplication.exe install
-
Run the command
.\myConsoleApplication.exe start
Code:
using System;
using System.Threading;
using Topshelf;
using Topshelf.Runtime;
namespace MyConsoleApplication
{
public class MyService
{
public MyService(HostSettings settings)
{
}
private SemaphoreSlim _semaphoreToRequestStop;
private Thread _thread;
public void Start()
{
_semaphoreToRequestStop = new SemaphoreSlim(0);
_thread = new Thread(DoWork);
_thread.Start();
}
public void Stop()
{
_semaphoreToRequestStop.Release();
_thread.Join();
}
private void DoWork()
{
while (true)
{
Console.WriteLine("doing work..");
if (_semaphoreToRequestStop.Wait(500))
{
Console.WriteLine("Stopped");
break;
}
}
}
}
public class Program
{
public static void Main()
{
HostFactory.Run(x =>
{
x.StartAutomatically(); // Start the service automatically
x.EnableServiceRecovery(rc =>
{
rc.RestartService(1); // restart the service after 1 minute
});
x.Service<MyService>(s =>
{
s.ConstructUsing(hostSettings => new MyService(hostSettings));
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("MyDescription");
x.SetDisplayName("MyDisplayName");
x.SetServiceName("MyServiceName");
});
}
}
}
Solution 3:
Browse to the folder and run the command:
AppName.exe install
You must run your command prompt as an Admin.