一、簡介 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"); } } }