Topshelf 是一个使用.NET构建Windows服务的框架。它极大的简化服务创建与部署过程,它支持将控制台应用程序部署为服务。开发过 Windows 服务程序的同学应该都比较清楚,代码调试和服务部署上相对来说都过于麻烦,当我第一次接触 Topshelf 的时候,发现它是如此简单

Topshelf 安装

通过 NuGet 安装 Topshelf 包

1
Install-Package Topshelf

Topshelf 配置

Topshelf 关键配置在 Main 方法内,更多的配置建议阅读一下官方文档,没什么特别复杂的地方,相信都能看懂

1
class Program
2
{
3
  static void Main(string[] args)
4
  {
5
    // 配置和运行宿主服务
6
    HostFactory.Run(x => 
7
    {
8
      // 指定服务类型。这里设置为 SchedulerService
9
      x.Service<SchedulerService>(s =>
10
      {
11
        // 通过 new Service() 构建一个服务实例 
12
        s.ConstructUsing(name => new SchedulerService());
13
        // 当服务启动后执行什么
14
        s.WhenStarted(tc => tc.Start());
15
        // 当服务停止后执行什么
16
        s.WhenStopped(tc => tc.Stop());
17
      });
18
      
19
      // 服务用本地系统账号来运行
20
      x.RunAsLocalSystem();
21
      
22
      // 服务描述信息
23
      x.SetDescription("调度服务");
24
      // 服务显示名称
25
      x.SetDisplayName("SchedulerService");
26
      // 服务名称
27
      x.SetServiceName("SchedulerService");
28
    });
29
  }
30
}
31
32
public class SchedulerService
33
{
34
  IScheduler scheduler;
35
  ISchedulerFactory factory;
36
  public SchedulerService()
37
  {
38
     factory = new StdSchedulerFactory();
39
            scheduler = factory.GetScheduler();
40
  }
41
  public void Start() { scheduler.Start(); }
42
  public void Stop() { scheduler.Shutdown(true); }
43
}

安装服务

通过以上配置,确保程序集生成成功后,进入 bin\Debug 目录下,执行 install 命令,一个 Windows 服务就诞生了

1
xxx.exe install

卸载服务

卸载和启动的命令保持一致,只需要把 install 改成 uninstall

1
xxx.exe uninstall

参考链接

Topshelf
Topshelf-Github