簡體   English   中英

在.net core中編寫windows服務

[英]Writing windows service in .net core

我的問題是如何在 .net core 中編寫我們曾經在以前的 .net 版本中編寫的 windows 服務?

許多鏈接/文章解釋了如何將您的 .net 核心應用程序托管為 Windows 服務。 所以這是我可以創建 Windows 服務的唯一方法嗎?

如果是,任何人都可以提供鏈接/示例嗎

謝謝!

這是在.net Core(控制台應用程序)中構建Windows服務的另一種簡單方法

DotNetCore.WindowsService

一個簡單的庫,允許將 dot net core 應用程序作為 windows 服務托管。

安裝

使用 nuget:安裝包 PeterKottas.DotNetCore.WindowsService

用法

  1. 創建 .NETCore 控制台應用程序。
  2. 創建您的第一個服務,如下所示:

     public class ExampleService : IMicroService { public void Start() { Console.WriteLine("I started"); } public void Stop() { Console.WriteLine("I stopped"); } }
  3. 服務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);}); }); });
  4. 不帶參數運行服務,它像控制台應用程序一樣運行。

  5. 使用action:install運行該服務,它將安裝該服務。
  6. 使用action:uninstall運行服務,它將卸載該服務。
  7. 使用action:start運行服務,它將啟動服務。
  8. 使用action:stop運行服務,它將停止服務。

不確定是否有這樣做的默認方式。 但是,您可以讓您的核心應用程序從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM