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

Topshelf 安装

通过 NuGet 安装 Topshelf 包

1
Install-Package Topshelf

Topshelf 配置

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class Program
{
static void Main(string[] args)
{
// 配置和运行宿主服务
HostFactory.Run(x =>
{
// 指定服务类型。这里设置为 SchedulerService
x.Service<SchedulerService>(s =>
{
// 通过 new Service() 构建一个服务实例
s.ConstructUsing(name => new SchedulerService());
// 当服务启动后执行什么
s.WhenStarted(tc => tc.Start());
// 当服务停止后执行什么
s.WhenStopped(tc => tc.Stop());
});

// 服务用本地系统账号来运行
x.RunAsLocalSystem();

// 服务描述信息
x.SetDescription("调度服务");
// 服务显示名称
x.SetDisplayName("SchedulerService");
// 服务名称
x.SetServiceName("SchedulerService");
});
}
}

public class SchedulerService
{
IScheduler scheduler;
ISchedulerFactory factory;
public SchedulerService()
{
factory = new StdSchedulerFactory();
scheduler = factory.GetScheduler();
}
public void Start() { scheduler.Start(); }
public void Stop() { scheduler.Shutdown(true); }
}

安装服务

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

1
xxx.exe install

卸载服务

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

1
xxx.exe uninstall

参考链接

Topshelf
Topshelf-Github