使用.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包
1
| Install-Package System.ServiceProcess.ServiceController -Version 4.5.0
|
修改启动类 Programe.cs
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 44 45 46 47 48 49 50
| 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的内容,确认服务的启动。
参考文档
- Running a .NET Core Generic Host App as a Windows Service
- Create windows service using .Net Core (Console application)