一個NET8 AOT編譯的輔助專案,讓你的任何可執行應用快速部署為服務

VictorStar發表於2023-11-26

?不知道大家有沒有和小編一樣,很多時候想將自己的一些應用轉為服務執行,比如一些控制檯應用或者.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服務。
儘管它們的目標相同,但它們在設計、配置和功能方面有所不同。
以下是兩者之間一些核心差異的概述:

  1. 設計理念:
    WinSW 使用XML檔案作為服務配置,由.NET框架支援,這意味著它需要.NET環境來執行。
    NSSM 則不依賴.NET框架,它是使用C++編寫的,並且包含了一個使用者友好的GUI進行服務配置。
  2. 配置:
    WinSW 需要一個XML配置檔案,其中指定服務的詳細資訊,這可能對那些習慣於XML格式的使用者更方便。
    NSSM 提供了一個命令列介面,用於安裝、刪除、啟動和管理服務。它還附帶了一個GUI,允許使用者透過圖形介面配置服務。
  3. 特性和功能:
    WinSW 支援日誌記錄、下載、服務失敗操作等。它允許服務自我更新,也支援延遲的自動啟動。
    NSSM 的特點是輕量,易於使用,也支援日誌記錄,可以自動重啟失敗的服務,並且能夠處理stdout和stderr輸出。
  4. 易用性:
    NSSM 因其簡單的GUI而受到一些使用者的青睞,允許快速安裝和配置服務。
    WinSW 需要使用者編輯XML檔案,這可能對一些使用者來說不那麼直觀,但對於熟悉該格式的使用者則非常有用。
  5. 依賴性:
    WinSW 依賴於.NET環境,所以在沒有安裝.NET的系統上不能使用。
    NSSM 沒有額外的依賴,它可以在所有現代Windows系統上直接執行。
  6. 社群和支援:
    WinSW 和 NSSM 都有活躍的社群,但他們的更新頻率和社群支援可能會有所不同。
    在選擇使用哪一個時,你需要根據你的特定需求、你的技術偏好以及你所在的環境來決定。例如,如果你已經在使用.NET環境,並且希望有一個詳細的配置檔案,那麼WinSW可能是更好的選擇。而如果你希望在沒有.NET環境的系統上執行,或者你喜歡使用圖形介面進行配置,那麼NSSM可能更適合你。

NSSM註冊服務後,後臺會常駐一個NSSM的程式檔案,所以我選擇了使用WinSW來做這個輔助工具。

封裝構想

查對了WinSW的文件,他是基於xml的配置來執行不同的命令,來處理不同的服務操作,那我們可以寫個程式,來封裝xml配置檔案的生成和指令的執行,這樣一來你處理你的服務應用就只需要雙擊你的輔助程式,便可以方便的啟停你的應用程式,.NET8剛好可以做AOT編譯的專案,那就用它來做這個工具吧,也不用安裝環境了,搞起。

專案構建

新建一個控制檯應用,基於.NET8 啟用AOT編譯

  1. 建一個model,來儲存轉為xml的配置檔案資料
    image

  2. 把方法都封裝到一個Helper類中
    封裝常用的 WinSW 命令
    image

  3. 封裝檢查、讀取、生成配置檔案的方法
    image

  4. 封裝啟動CMD的方法
    image

  5. 最後封裝指令選單
    image

看看執行效果

我的API專案執行檔案是 Simple.WebHost.exe

  1. 雙擊我的輔助專案編譯檔案 Simple.RunService.exe 配置指令

image

檢視1. 生成的xml文件
image

小試一刀1. ,註冊並啟動服務
image

簡單吧,簡單的封裝,配置一次,以後更新啥的,直接雙擊執行輔助專案輸入個數字就搞定了

看看編譯的輔助工具的檔案 2M還行吧,不用安裝環境哦 注意X64環境使用哦
image

點我✨Star