Topshelf的使用

来源:http://www.cnblogs.com/dayang12525/archive/2017/11/17/7851230.html
-Advertisement-
Play Games

一、簡介 Topshelf可用於創建和管理Windows服務。其優勢在於不需要創建windows服務,創建控制台程式就可以。便於調試。 二、官方地址: 1、官網:http://topshelf-project.com/ 2、官方文檔:https://topshelf.readthedocs.io/e ...


 

一、簡介

Topshelf可用於創建和管理Windows服務。其優勢在於不需要創建windows服務,創建控制台程式就可以。便於調試。

二、官方地址:

1、官網:http://topshelf-project.com/

2、官方文檔:https://topshelf.readthedocs.io/en/latest/

3、github地址:https://github.com/Topshelf/Topshelf

三、詳細示例

1、創建控制台程式“Topshelf測試”,Nuget中引入Topshelf,如圖所示:

也可以用Nuget的命令行引入,命令如下:

  • Install-Package Topshelf

2、在項目中添加類,命名為:TopshelfTest

內容如下:

    public class TopshelfTest
    {
        readonly Timer _timer;
        public TopshelfTest()
        {
            _timer = new Timer(1000) { AutoReset = true };
            _timer.Elapsed += (sender, eventArgs) => { Run(); };
        }
        public void Start() { _timer.Start(); }
        public void Stop() { _timer.Stop(); }
        public static void Run()
        {
            Console.WriteLine("hello Topshelf");
        }
    }

3、在Main函數中加入如下代碼:

        public static void Main(string[] args)
        {
            HostFactory.Run(x=>
            {
                x.RunAsLocalSystem();
                x.SetDescription("topshelf測試");
                x.SetDisplayName("topshelftest");
                x.SetServiceName("topshelftest");

                x.Service<TopshelfTest>(s =>
                {
                    s.ConstructUsing(name => new TopshelfTest());
                    s.WhenStarted(tc => tc.Start());
                    s.WhenStopped(tc => tc.Stop());
                });
            });
        }

 

4、運行程式,輸出如下,每秒中會執行一次Run函數,也就會列印一次“hello Topshelf”

 

5、安裝服務:

以管理員許可權打開cmd命令,管理服務的命令如下:

安裝:Topshelf測試.exe install 啟動:Topshelf測試.exe start 卸載:Topshelf測試.exe uninstall   執行命令需要切入到程式目錄下,如圖所示: 安裝服務:

啟動服務:

  卸載服務:

 安裝後可以看到服務中出現了安裝的服務:

四、示例代碼

using System;
using System.Timers;
using Topshelf;
namespace Topshelf測試
{
    public class Program
    {
        public static void Main(string[] args)
        {
            HostFactory.Run(x=>
            {
                x.RunAsLocalSystem();
                x.SetDescription("topshelf測試");
                x.SetDisplayName("topshelftest");
                x.SetServiceName("topshelftest");

                x.Service<TopshelfTest>(s =>
                {
                    s.ConstructUsing(name => new TopshelfTest());
                    s.WhenStarted(tc => tc.Start());
                    s.WhenStopped(tc => tc.Stop());
                });
            });
        }
    }
    public class TopshelfTest
    {
        readonly Timer _timer;
        public TopshelfTest()
        {
            _timer = new Timer(1000) { AutoReset = true };
            _timer.Elapsed += (sender, eventArgs) => { Run(); };
        }
        public void Start() { _timer.Start(); }
        public void Stop() { _timer.Stop(); }
        public static void Run()
        {
            Console.WriteLine("hello Topshelf");
        }
    }
}

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [20171115]ZEROCONF ROUTE.txt--//如果你檢查linux伺服器的網路配置,就可以發現如下一條路由:# route -n | egrep "169.254|Destination"Destination Gateway Genmask Flags Metric Ref Us ...
  • 總項目流程圖,詳見http://www.cnblogs.com/along21/p/7435612.html 實驗一:實現反向代理負載均衡且動靜分離 1、環境準備: 機器名稱 IP配置 服務角色 備註 nginx VIP:172.17.11.11 反向代理伺服器 開啟代理功能 設置監控,調度 rs0 ...
  • 一.序言 本資料是Trevor Martin編寫的《The Designers Guide to the Cortex-M Processor Family》的摘要,並得到Elsevier的再版許可。查詢更多細節,請到本資料尾部進階章節。 本資料著力於介紹RTX,RTX可運行在基於Cortex-M構 ...
  • 背景: 一段明顯的字元串,可能潛伏著看不見 的 幽靈字元。 某些字元 比較常見、常用,比如: \r \n \t 但是,有些 幽靈字元(保守估計 >200~1000個),不僅不常見,而且基本沒價值。 這些幽靈字元,潛伏在 正常字元串中,有的偽裝成空格符,有的直接隱形。 當你要 處理字元串時,這些幽靈字 ...
  • 在使用由Angular,React,Vue等應用程式框架構建的客戶端應用程式時,您總是會處理HTML5客戶端路由,它將完全在瀏覽器中處理到頁面和組件的客戶端路由。幾乎完全在瀏覽器中... HTML5客戶端路由在客戶端上工作的很好,但是當深入鏈接到一個站點或在瀏覽器中按刷新時,客戶端路由有一個惡習,變 ...
  • DEV控制項GridControl和TreeList的數據導出操作 ...
  • 學習:C#綜合揭秘——Entity Framework 併發處理詳解 帖子筆記 ,該帖子使用的是objectContext , 一、併發相關概念 併發的類型: 第一種模式稱為悲觀式併發,即當一個用戶已經在修改某條記錄時,系統將拒絕其他用戶同時修改此記錄。第二種模式稱為樂觀式併發,即系統允許多個用戶同... ...
  • Visual Studio 2017是微軟為了配合.NET戰略推出的IDE開發環境,同時也是目前開發C#程式最新的工具,本節以Visual Studio 2017社區版的安裝為例講解具體的安裝步驟。 說明:Visual Studio 2017 社區版是完全免費的,其下載地址為:https://www ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...