使用.NET Core的Windows服务

32

有没有一种方法可以使用.NET Core开发一个Windows服务(能够在启动时启动等...)?

我找到的所有教程和说明都使用System.ServiceProcess.ServiceBase,但是在Visual Studio 2015中无法找到和添加该类库?

我也试图避免使用像SrvStart这样的第三方工具/库。类似Topshelf这样的工具可以接受,但好像不适用于.NET Core。

并且如果这个服务能够在Windows和Linux下运行就更好了。

有什么想法可以实现这个目标吗?


1
你可以使用两个不同的东西。 https://github.com/dasMulli/dotnet-win32-service https://github.com/aspnet/Hosting/tree/dev/src/Microsoft.AspNetCore.Hosting.WindowsServices - TerribleDev
谢谢您提供的信息。虽然我的目标是成为后台工作者而不是托管的Web服务。 - monty
2
我已经创建了一个库,应该能够为您简化这个过程。您可以在此处找到它 https://github.com/PeterKottas/DotNetCore.WindowsService。希望您会发现它有用。 - Peter Kottas
1个回答

23

我来总结一下几种选项:

  1. 将您的代码移动到 .NET Standard 库,并在 .NET Framework 应用程序中托管它,以便您可以使用 ServiceBase。当然,这需要在目标计算机上安装 .NET Framework。
  2. 使用NSSM(Non-Sucking Service Manager) 来管理 .NET Core 控制台应用程序(它是公共领域许可证)。
  3. 使用 Windows API 调用来挂接到 Windows 服务方法。这是 DotNetCore.WindowsServicedotnet-win32-service 采取的方法(两者都是 MIT 许可证)。

1
我选择了PeterKottas的DotNetCore.WindowsService并感到满意。 - monty
@Cocowalla:这不仅需要安装.NET Framework,还需要安装特定最低版本的.NET Framework(因为NetStandard无法与.NET2或.NET 4一起使用)... - Stefan Steiger
@StefanSteiger,我猜您是指我的第一个选项?是的,如果您想要良好的兼容性,至少需要4.6.2版本。还有人在使用.NET 2.0吗?! - Cocowalla
@Cocowalla:是的,我的公司xD。 - Stefan Steiger
自从 .Net Core 3 推出以来:https://csharp.christiannagel.com/2019/10/15/windowsservice/ - monty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接