?不知道大家有沒有和小編一樣,很多時候想將自己的一些應用轉為服務執行,比如一些控制檯應用或者.NET Core應用,但是又不想重新編碼,把他們轉為服務,本文將給大家提供些我使用過的方法,並提供一個基於NET8 AOT編譯的輔助專案的封裝工具構建方法,快來看看吧。點我✨Star
我的快速開發框架專案
先介紹下我的基於.NET 8的快速開發框架Simple Framework,旨在簡化開發流程,減少學習成本。框架特點包括基於.NET 8、少用第三方庫、基本授權鑑權、CRUD實現和後臺管理前端。規劃使用了NLog、Redis、Json庫等,並支援多資料庫結構。框架包含基礎庫、Web專案擴充套件庫、EFCore擴充套件庫、程式碼生成器和定時任務模組,並提供了一套基於vue2 elementui前端頁面框架,以提高開發效率和靈活性,釋出以來收到了很多朋友的喜歡,本文的封裝工具也是朋友的建議下擼出來的,快去看看吧。
把應用封裝為服務的常用方式 WinSW 和 NSSM
WinSW(Windows Service Wrapper)和 NSSM(Non-Sucking Service Manager)都是流行的開源工具,用於將任何可執行檔案包裝為Windows服務。
儘管它們的目標相同,但它們在設計、配置和功能方面有所不同。
以下是兩者之間一些核心差異的概述:
- 設計理念:
WinSW 使用XML檔案作為服務配置,由.NET框架支援,這意味著它需要.NET環境來執行。
NSSM 則不依賴.NET框架,它是使用C++編寫的,並且包含了一個使用者友好的GUI進行服務配置。 - 配置:
WinSW 需要一個XML配置檔案,其中指定服務的詳細資訊,這可能對那些習慣於XML格式的使用者更方便。
NSSM 提供了一個命令列介面,用於安裝、刪除、啟動和管理服務。它還附帶了一個GUI,允許使用者透過圖形介面配置服務。 - 特性和功能:
WinSW 支援日誌記錄、下載、服務失敗操作等。它允許服務自我更新,也支援延遲的自動啟動。
NSSM 的特點是輕量,易於使用,也支援日誌記錄,可以自動重啟失敗的服務,並且能夠處理stdout和stderr輸出。 - 易用性:
NSSM 因其簡單的GUI而受到一些使用者的青睞,允許快速安裝和配置服務。
WinSW 需要使用者編輯XML檔案,這可能對一些使用者來說不那麼直觀,但對於熟悉該格式的使用者則非常有用。 - 依賴性:
WinSW 依賴於.NET環境,所以在沒有安裝.NET的系統上不能使用。
NSSM 沒有額外的依賴,它可以在所有現代Windows系統上直接執行。 - 社群和支援:
WinSW 和 NSSM 都有活躍的社群,但他們的更新頻率和社群支援可能會有所不同。
在選擇使用哪一個時,你需要根據你的特定需求、你的技術偏好以及你所在的環境來決定。例如,如果你已經在使用.NET環境,並且希望有一個詳細的配置檔案,那麼WinSW可能是更好的選擇。而如果你希望在沒有.NET環境的系統上執行,或者你喜歡使用圖形介面進行配置,那麼NSSM可能更適合你。
NSSM註冊服務後,後臺會常駐一個NSSM的程式檔案,所以我選擇了使用WinSW來做這個輔助工具。
封裝構想
查對了WinSW的文件,他是基於xml的配置來執行不同的命令,來處理不同的服務操作,那我們可以寫個程式,來封裝xml配置檔案的生成和指令的執行,這樣一來你處理你的服務應用就只需要雙擊你的輔助程式,便可以方便的啟停你的應用程式,.NET8剛好可以做AOT編譯的專案,那就用它來做這個工具吧,也不用安裝環境了,搞起。
專案構建
新建一個控制檯應用,基於.NET8 啟用AOT編譯
-
建一個model,來儲存轉為xml的配置檔案資料
-
把方法都封裝到一個Helper類中
封裝常用的 WinSW 命令
-
封裝檢查、讀取、生成配置檔案的方法
-
封裝啟動CMD的方法
-
最後封裝指令選單
看看執行效果
我的API專案執行檔案是 Simple.WebHost.exe
- 雙擊我的輔助專案編譯檔案 Simple.RunService.exe 配置指令
檢視1. 生成的xml文件
小試一刀1. ,註冊並啟動服務
簡單吧,簡單的封裝,配置一次,以後更新啥的,直接雙擊執行輔助專案輸入個數字就搞定了
看看編譯的輔助工具的檔案 2M還行吧,不用安裝環境哦 注意X64環境使用哦