![](/img/trans.png)
[英].Net Core 6 Worker Service not writing to Logs when running as a Windows Service
[英]Writing windows service in .net core
我的問題是如何在 .net core 中編寫我們曾經在以前的 .net 版本中編寫的 windows 服務?
許多鏈接/文章解釋了如何將您的 .net 核心應用程序托管為 Windows 服務。 所以這是我可以創建 Windows 服務的唯一方法嗎?
如果是,任何人都可以提供鏈接/示例嗎
謝謝!
這是在.net Core(控制台應用程序)中構建Windows服務的另一種簡單方法
一個簡單的庫,允許將 dot net core 應用程序作為 windows 服務托管。
使用 nuget:安裝包 PeterKottas.DotNetCore.WindowsService
創建您的第一個服務,如下所示:
public class ExampleService : IMicroService { public void Start() { Console.WriteLine("I started"); } public void Stop() { Console.WriteLine("I stopped"); } }
服務API:
ServiceRunner<ExampleService>.Run(config => { var name = config.GetDefaultName(); config.Service(serviceConfig => { serviceConfig.ServiceFactory((extraArguments) => { return new ExampleService(); }); serviceConfig.OnStart((service, extraArguments) => { Console.WriteLine("Service {0} started", name); service.Start(); }); serviceConfig.OnStop(service => { Console.WriteLine("Service {0} stopped", name); service.Stop(); }); serviceConfig.OnError(e => { Console.WriteLine("Service {0} errored with exception : {1}", name, e.Message);}); }); });
不帶參數運行服務,它像控制台應用程序一樣運行。
不確定是否有這樣做的默認方式。 但是,您可以讓您的核心應用程序從ServiceBase繼承並實現必要的覆蓋。 我們在我們的應用程序中這樣做(請注意,我們針對的是完整的框架,而不是核心)。 最初的想法來自以下文章:
請注意,這些文章仍然引用了DNX (從 .NET Core 測試版開始)——如今,您的核心應用程序將編譯為 exe,因此您可以調整它們的示例以滿足這一點。
這是使用 .net core 構建 windows 服務的一種方式。
它是使用 P/Invoke 調用構建到本機 Windows 程序集中的。
編寫windows服務的例子(取自github項目頁面):
using DasMulli.Win32.ServiceUtils;
class Program
{
public static void Main(string[] args)
{
var myService = new MyService();
var serviceHost = new Win32ServiceHost(myService);
serviceHost.Run();
}
}
class MyService : IWin32Service
{
public string ServiceName => "Test Service";
public void Start(string[] startupArguments, ServiceStoppedCallback serviceStoppedCallback)
{
// Start coolness and return
}
public void Stop()
{
// shut it down again
}
}
它並不完美,但恕我直言,它非常好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.