之前的文章已经写过了创建windows服务。
不过之前使用的是.net framework创建的windows服务。现在已经2023年了,其中vs2022有新的方法去创建windows服务,本次使用.net6创建windows服务。
1.选择如图所示,其中vs2022这样的,vs2019不一样,但是都是worker service
2.创建完成是这样的
3.安装microsoft.extensions.hosting.windowsservices
这里注意版本,选择的是net6,好像只能安装6版本的。
nuget里面安装
4.服务命名,program.cs文件
namespace workerservicedemo { public class program { public static void main(string[] args) { ihost host = host.createdefaultbuilder(args) .usewindowsservice(options => { //给服务命名,在windows服务中的会显示名字 options.servicename = "net6故里2130"; }) .configureservices(services => { services.addhostedservice<worker>(); }) .build(); host.run(); } } }
5.服务里面写启动,停止,以及执行任务,worker.cs中写
里面的业务就是,检测启动,停止,每次执行任务都输出
namespace workerservicedemo { public class worker : backgroundservice { private readonly ilogger<worker> _logger; private readonly string filepath = "d:\\service1.txt"; public worker(ilogger<worker> logger) { _logger = logger; } /// <summary> /// 执行任务 /// </summary> /// <param name="stoppingtoken"></param> /// <returns></returns> protected override async task executeasync(cancellationtoken stoppingtoken) { while (!stoppingtoken.iscancellationrequested) { _logger.loginformation("worker running at: {time}", datetimeoffset.now); using (filestream stream = new filestream(filepath, filemode.append)) using (streamwriter writer = new streamwriter(stream)) { writer.writeline($"{datetimeoffset.now},服务执行!"); } await task.delay(1000, stoppingtoken); } } /// <summary> /// 服务启动 /// </summary> /// <param name="cancellationtoken"></param> /// <returns></returns> public override task startasync(cancellationtoken cancellationtoken) { using (filestream stream = new filestream(filepath, filemode.append)) using (streamwriter writer = new streamwriter(stream)) { writer.writeline($"{datetime.now},服务启动!"); } return base.startasync(cancellationtoken); } /// <summary> /// 服务停止 /// </summary> /// <param name="cancellationtoken"></param> /// <returns></returns> public override task stopasync(cancellationtoken cancellationtoken) { using (filestream stream = new filestream(filepath, filemode.append)) using (streamwriter writer = new streamwriter(stream)) { writer.writeline($"{datetime.now},服务停止!"); } return base.stopasync(cancellationtoken); } } }
6.效果
7.实际情况,我们肯定不是这么使用,但是这样调试肯定是可以的,接下来,我们安装此服务,变成windows服务的样子,首选先进行发布
8.执行此命令
sc.exe create "故里2130" binpath="d:\code\workerservice1\workerservicedemo\bin\release\net6.0\publish\workerservicedemo.exe"
9.此时打开windows服务,看到已经有了
10.现在就和正常的服务一样了,有开始,有停止,操作后,然后打开日志,可以看到服务的记录。
到此这篇关于.net6创建windows服务的实现步骤的文章就介绍到这了,更多相关.net6创建windows服务内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论