C#如何编写Windows服务
起因
这两天在写一个定时任务,在公司项目中,使用的是.Net Framework 4.0. 便想着在.Net Core是不是可以编写Windows服务,果真是可以的(2020-09-01)
1. 在.Net Framework中可以用installutil服务进行注册和卸载
//注册服务 C:/Windows/Microsoft.NET/Framework/v4.0.30319/installutil -i E:/project/csharp/dotnetcore31/dotnet.core/qiufeng.service2/bin/Debug/qiufeng.service2.exe //卸载服务 C:/Windows/Microsoft.NET/Framework/v4.0.30319/installutil /u E:/project/csharp/dotnetcore31/dotnet.core/qiufeng.service2/bin/Debug/qiufeng.service2.exe //启动服务 net start Service1 //关闭服务 net stop Service1
2. 创建.Net Core控制台程序
在Nuget中,查找
System.ServiceProcess.ServiceController 进行安装.然后添加新项目
用.Net Core编写Windows 服务
namespace CoreService { partial class Service1 : ServiceBase { public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { // TODO: 在此处添加代码以启动服务。 } protected override void OnStop() { // TODO: 在此处添加代码以执行停止服务所需的关闭操作。 } } }
static void Main(string[] args) { ServiceBase[] services = new ServiceBase[] { new Service1() //可以增加多个服务 }; ServiceBase.Run(services); }
3. .Net Core的windows服务注册和卸载
.Net Core中没有installutil工具.该怎么注册服务呢?
//使用管理员权限打开命令行工具,用powershell不可以,目前没发现哪里的问题 //sc create "xxx(服务名称)" binpath=xxx(服务所在的绝对路径) 注册服务 sc create "qiufengservice" binpath=xxx //sc delete "xxx(服务名称)" 卸载服务 #sc delete "qiufengservice"
在.Net 5(应该是)中可以通过依赖注入(内部还是在ServiceBase继续封装)的使用,更简单的是使用中间件.
个人能力有限,如果您发现有什么不对,请私信我
如果您觉得对您有用的话,可以点个赞或者加个关注,欢迎大家一起进行技术交流
赞 (0)