C# Topshelf 搭建 Windows 服务
Topshelf 是一个用来部署基于.NET Framework 开发的服务的框架。简化服务创建于部署过程,并且支持控制台应用程序部署为服务。本文基于 .net core 控制台应用程序部署为服务(.net Framework 可用)。
第一步:创建名为 TopshelfDemo 的控制台应用程序
第二步:通过 Nuget 安装 Topshelf 包
第三步:Toshelf 配置,代码并不多下面都有注释
using System;
using Topshelf;namespace TopshelfDemo
{class Program{static void Main(string[] args){try{ // 配置和运行宿主服务HostFactory.Run(x => //1{x.Service<Service>(s => //2{// 指定服务类型。这里设置为 Services.ConstructUsing(name => new Service()); //3// 当服务启动后执行什么s.WhenStarted(tc => tc.Start()); //4// 当服务停止后执行什么s.WhenStopped(tc => tc.Stop()); //5});// 服务用本地系统账号来运行x.RunAsLocalSystem(); //6// 服务描述信息x.SetDescription("我的项目服务"); //7// 服务显示名称x.SetDisplayName("MyProjectServiceShowName"); //8// 服务名称x.SetServiceName("MyProjectService"); //9 }); }catch (Exception ex){Console.WriteLine(ex);}}}public class Service{ public void Start() {//To do something}public void Stop() {//To do something}}
}
第四步:安装服务
确保项目正常生成,然后通过管理员权限打开 cmd 命令窗口,找到项目所在的 Debug 目录,输入命令:TopshelfDemo.exe install或者双击文件
如果是使用 .net core 的小伙伴你会发现 Debug下压根没有 TopshelfDemo.exe ,这不是扯淡呢么,别急往下看。
由于 .net core 依赖 runtimes 所以我们需要发布以下程序,并且选择独立项目就ok啦。
到这里我出现了问题提示 TopshelfDemo.exe install 无法安装,根据提示执行./TopshelfDemo.exe install
就安装ok。
失败提示信息:The ** service can only be installed as an administrator
解决方案:右击**.exe文件,属性-》兼容性-》勾选以管理员身份运行
也可以通过 sc delete MyProjectService 进行删除
后面可以搭配Quartz
实现任务调度