分別在.NET Framework 與 .NET Core 框架下 編寫Windows Service(windows服務程序)


  前言,為什么會分別在兩個框架下編寫Windows Service,是因為最近在做區塊鏈這塊,使用的是NEO(小蟻區塊鏈)的相關技術,NEO使用的是.net core 2.1,業務上需要寫兩個程序,一個同步數據到本地,一個保持對鏈上數據的訪問。之前一直是用的控制台,但是部署后容易誤操作,關閉之類的(實際上一開始就該想到的),所以需要改成windows服務。就用.NET Framework 和.NET Core都試了一下。

IDE:vs2017

.NET Framework 下編寫Windows Service

1、創建項目

2、將Service1改名為自己的名稱BlockSyncService,並編寫自己的程序

 

3、設置WindowsService的屬性

定位到BlockSyncService頁面,並查看代碼,在OnSatrt()與OnStop()方法中寫入對應服務啟動與停止的代碼。

4、回到BlockSyncService設計頁面,右鍵空白處選擇“添加安裝程序”

5、右鍵serviceProcessInstaller1選擇屬性,設置Account(賬戶)為LocalSystem;

     右鍵serviceinstaller1選擇屬性,設置Description(對部署服務的描述)、ServiceName(部署服務的名稱)、StartType(服務的啟動方式(自啟動-Automatic,手動啟動-Manual,禁止啟動-Disabled等))

     設置完后重新生成解決方案。

6、部署服務

以管理員身份運行cmd,輸入命令  sc create 服務名稱 binPath="程序exe文件的路徑"   用於創建服務

注意:出現“[SC] OpenSCManager 失敗 5:拒絕訪問。” 的錯誤提示,請使用管理員身份打開命令提示符(cmd)

若沒有設置啟動方式,也可再輸入命令 sc config BlockSyncService start="AUTO"     用於配置服務的啟動方式(AUTO-自啟動)

配置成功后,輸入 net start BlockSyncService   啟動服務即可。

 

 7、服務調試

WindowsService 無法直接調試,只能在已經啟動服務的情況下,通過附加到進程,從而進行調試。如下圖

勾選“顯示所有用戶”

選擇自己的服務進程,並附加

注意:附加到進程是無法調試OnStart()方法的,一般情況下可以把OnStart()中的代碼放到OnStop()中執行並調試。調試相對比較麻煩。

 

 

最后,win+r 並輸入 swevices.msc 進入服務管理界面,右鍵停止即可觸發調試。

 

.NET Core下編寫Windows Service

1、創建一個.net core 控制台項目

2、添加WindowsService項

 

創建后,會提示錯誤。這是因為,沒有命名空間“System.ServiceProcess.ServiceController”,需要nuget安裝。

3、編寫自己的程序,設置SBS-RPC-Service.cs中的OnStart()和OnStop(),最后設置Program.cs,重新生成代碼。

 

 

調試與部署步驟與.NET Framework 的步驟基本一致,只是.net core 需要先發布,在創建服務時 binPath=“發布的.exe程序的路徑”,其他的並無區別,這里就不再重復說了。

 順便附一下官方的在 Windows 服務中托管 ASP.NET Core的文檔:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-2.1

打賞

免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2021 CODEPRJ.COM