将.Net core 2.0控制台应用程序作为Windows服务

9
我正在尝试将一个 .Net Core 控制台应用程序设置为服务。在使用 .Net Standard 时,我通常使用 Topshelf,但这似乎不支持 .Net Core。
由于 Topshelf 不可行,我该如何将 .Net Core 控制台应用程序作为 Windows 服务运行?
我找到了 https://github.com/PeterKottas/DotNetCore.WindowsService,这个是否是生产环境中的可替代品?

2
当您针对Windows服务时,担心.NET Core有些不切实际;为什么不针对.NET并使用内置的.NET服务支持呢? - Marc Gravell
完全离题,但在Linux上我使用.NET Core编写了一个控制台应用程序,并使用Immortal(https://immortal.run/)来监督它。 - zaitsman
在Linux上,控制台应用程序很好用,在Windows上,程序需要通过一些本地API调用连接到服务管理器。我们正在客户现场运行自包含部署,以最小侵入式的方式进行部署,无需IIS配置(请参见答案)。 - Martin Ullrich
3个回答

10
有几个选择:
  1. 使用适用于 Windows 的兼容性包,将 ServiceBase 和相关的 API 带回到 .NET Core,这样 TopShelf 就可以直接运行。(该包目前处于 RC 阶段,计划在一周后发布稳定版本)

  2. TopShelf 现在支持 .NET Core,基于兼容性包 / 适用于新版 .NET Core 的 Windows 兼容性。

  3. https://github.com/PeterKottas/DotNetCore.WindowsService 对许多用户有效,建议试用。

  4. (3) 中的库是我为公司编写的 DasMulli.Win32.ServiceUtils 的良好 API,以便能够在生产环境中部署独立的 .NET Core 应用程序。到目前为止,我们没有遇到任何问题。

  5. 其他服务主机抽象了 windows 服务基础架构并运行任意程序,如Non-Sucking Service Manager。请注意,这可能无法提供优雅地响应 Stop 命令的方法。


谢谢,我会等待1中提到的稳定版本发布。 - Matthew P.
你可以立即前往使用2.1.0 RTM早期访问 https://github.com/aspnet/Home/wiki/2.1.0-Early-Access-Downloads - Martin Ullrich
更新:Topshelf现在支持核心。 - LearningNeverEnds

2
在 .net core 中,您无法选择以服务的形式运行。但是,如果将控制台应用程序容器化,则可以在任何地方部署容器,并且与运行服务一样。从 .NET Core 2.1 开始,您可以使用 Host 和 HostBuilder 来管理 DI、Logging、Graceful 关闭等内容。请查看:在 .NET Core 控制台应用程序中托管服务

0

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