開發Windows Service的時後,為了開發方便,之前都用一些小技巧切換在本機的Console模式和伺服器的Service模式,但在日後維護的時後或是偵錯的時後,總是不太方便,最近用了一個好用的套件叫TopShelf,是一個用來開發Windows Service的框架,實在太好用了,所以記錄一下筆記
首先新增一個Console專案
[![](http://2.bp.blogspot.com/-b-j_Dv8q9Y0/Vqg97bx32-I/AAAAAAAADkE/QVrxbWArdXg/s1600/01.%25E6%2596%25B0%25E5%25A2%259E%25E5%25B0%2588%25E6%25A1%2588.png)](http://2.bp.blogspot.com/-b-j_Dv8q9Y0/Vqg97bx32-I/AAAAAAAADkE/QVrxbWArdXg/s1600/01.%25E6%2596%25B0%25E5%25A2%259E%25E5%25B0%2588%25E6%25A1%2588.png)
透過NuGet安裝TopShelf套件
[![](http://4.bp.blogspot.com/-0rrhnPEnOBU/Vqg97v3I74I/AAAAAAAADkQ/3I4zfXvgEYg/s1600/02.%25E5%25AE%2589%25E8%25A3%259D%25E5%25A5%2597%25E4%25BB%25B6.png)](http://4.bp.blogspot.com/-0rrhnPEnOBU/Vqg97v3I74I/AAAAAAAADkQ/3I4zfXvgEYg/s1600/02.%25E5%25AE%2589%25E8%25A3%259D%25E5%25A5%2597%25E4%25BB%25B6.png)
簡單地寫一個類別,包含Start和Stop兩個函式
using System;
namespace ConsoleApplication1
{
class MyService
{
public void Start()
{
Console.WriteLine(“MyService Start”);
}
public void Stop()
{
Console.WriteLine("My Service Stop");
}
}
}
回到應用程式進入點開始配置服務
using Topshelf;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Topshelf.HostFactory.Run(x=>
{
x.Service<MyService>(s =>
{
s.ConstructUsing(() => new MyService());
s.WhenStarted(svc => svc.Start());
s.WhenStopped(svc => svc.Stop());
});
x.RunAsLocalSystem();
x.StartAutomatically();
x.SetServiceName("MyService");
x.SetDisplayName("MyService Display Name");
x.SetDescription("MyService Description");
});
}
}
}
本機執行的結果
[![](http://1.bp.blogspot.com/-GkrSRu9YLU4/Vqg_kHL4ehI/AAAAAAAADkg/LahcDKUIdWU/s1600/05.%25E6%259C%25AC%25E6%25A9%259F%25E5%259F%25B7%25E8%25A1%258C.png)](http://1.bp.blogspot.com/-GkrSRu9YLU4/Vqg_kHL4ehI/AAAAAAAADkg/LahcDKUIdWU/s1600/05.%25E6%259C%25AC%25E6%25A9%259F%25E5%259F%25B7%25E8%25A1%258C.png)
安裝服務只要在執行檔後面加上install參數就行了
[![](http://1.bp.blogspot.com/-6rLO7_yoe6w/Vqg971lJ8GI/AAAAAAAADkM/uGAQ8bsxYb8/s1600/06.%25E5%25AE%2589%25E8%25A3%259D%25E6%259C%258D%25E5%258B%2599.png)](http://1.bp.blogspot.com/-6rLO7_yoe6w/Vqg971lJ8GI/AAAAAAAADkM/uGAQ8bsxYb8/s1600/06.%25E5%25AE%2589%25E8%25A3%259D%25E6%259C%258D%25E5%258B%2599.png)
服務就安裝好了
[![](http://4.bp.blogspot.com/-3cK_eEnf4kg/Vqg98D_gpwI/AAAAAAAADkU/TUBeL9FKSV8/s1600/07.%25E6%259C%258D%25E5%258B%2599%25E5%25AE%2589%25E8%25A3%259D.png)](http://4.bp.blogspot.com/-3cK_eEnf4kg/Vqg98D_gpwI/AAAAAAAADkU/TUBeL9FKSV8/s1600/07.%25E6%259C%258D%25E5%258B%2599%25E5%25AE%2589%25E8%25A3%259D.png)
解除安裝只要在執行檔後面加上uninstall參數就行了
[![](http://3.bp.blogspot.com/-uA5zSmZopiQ/Vqg98MU_ArI/AAAAAAAADkY/YPSWE2dvc_A/s1600/08.%25E8%25A7%25A3%25E9%2599%25A4%25E5%25AE%2589%25E8%25A3%259D.png)](http://3.bp.blogspot.com/-uA5zSmZopiQ/Vqg98MU_ArI/AAAAAAAADkY/YPSWE2dvc_A/s1600/08.%25E8%25A7%25A3%25E9%2599%25A4%25E5%25AE%2589%25E8%25A3%259D.png)
更詳細的功能可以參考官網的文件
[TopShlep官網](http://topshelf-project.com/)
Sharing is caring!