使用.Net Core 2.2创建windows服务

Posted xyfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用.Net Core 2.2创建windows服务相关的知识,希望对你有一定的参考价值。

使用.Net Core 2.2创建windows服务

我的环境

  • win 10 home
  • Visual Studio 2019 v16.1.3
  • 安装有.net core 2.2

创建项目

技术图片

技术图片

编辑项目文件

在 PropertyGroup 配置节 加入属性 <RuntimeIdentifier>win-x64</RuntimeIdentifier>

技术图片

保存后,重新生成项目

在项目文件夹下,会有文件夹 bin\\Debug\\netcoreapp2.2\\win-x64,里面包含了exe文件。

技术图片

测试服务类的编写

安装nuget包

Install-Package System.ServiceProcess.ServiceController -Version 4.5.0

修改启动类 Programe.cs

using System;
using System.IO;
using System.ServiceProcess;

namespace TestService

    class Program
    
        static void Main(string[] args)
        
            using (var service = new TestSevice())
            
                ServiceBase.Run(service);
            
        
    

    internal class TestSevice : ServiceBase
    
        public TestSevice()
        
            ServiceName = "TestService";
        

        protected override void OnStart(string[] args)
        
            string filename = CheckFileExists();
            File.AppendAllText(filename, $"DateTime.Now started.Environment.NewLine");
        

        protected override void OnStop()
        
            string filename = CheckFileExists();
            File.AppendAllText(filename, $"DateTime.Now stopped.Environment.NewLine");
        

        private static string CheckFileExists()
        
            string filename = System.AppDomain.CurrentDomain.BaseDirectory + @"\\MyService.txt";
            if (!File.Exists(filename))
            
                File.Create(filename);
            

            return filename;
        

    

服务安装、启动、卸载

安装

sc create testservice binpath=D:\\source\\repos\\TestConsoleService\\TestService\\bin\\Debug\\netcoreapp2.2\\win-x64\\TestService.exe

卸载

sc delete testservice

启动

不能通过命令行启动服务

sc start testservice

只能去服务管理器使用鼠标启动服务,具体原因暂未研究

反复启动停止,然后去exe所在目录下查看MyService.txt的内容,确认服务的启动。

参考文档

以上是关于使用.Net Core 2.2创建windows服务的主要内容,如果未能解决你的问题,请参考以下文章

这是如何使用 Entity Framework Core 和 ASP.NET Core MVC 2.2+ 和 3.0 创建数据传输对象 (DTO)

HTTP/2 与 ASP.NET Core 2.2

ASP.NET Core 2.2 WebAPI 405 方法不允许

如何将 .NET Core 2.2 Web API 迁移到 .NET Core 3.0?

.net framework(4.6.2) 迁移 .net core(2.2) 总结

如何解决“当前 .NET SDK 不支持面向 .NET Core 2.2”