如何作個本身想要的Window的服務了?

前言說明

  • 使用工具:VS2019
  • 思考爲何要使用WindowService,它能作什麼了?(後面解答)

一:什麼是WindowService?(咱們作的是一個什麼東西?)

        Microsoft Windows 服務(過去稱爲 NT 服務)容許用戶建立可在其自身的 Windows 會話中長時間運行的可執行應用程序。(微軟爸爸是這麼解釋,簡單介紹)
        個人理解,它就是一個掛載在咱們系統上的服務,咱們系統上服務其實有不少,好比咱們的Sql數據庫的服務:MSSQLSERVER,這個是啓動數據庫的一個服務,開啓這個服務咱們才能鏈接本地的安裝的SQL。那WindowService應該也是一個這樣的服務,能夠理解是一個可讓咱們自定義開發的服務。
數據庫

二:如何建立WindowService?(咱們知道是什麼東西,怎麼作?)

1.打開VS2019,類別選擇服務,選擇Windows服務類別

2.添加安裝程序



安裝以後,目錄會添加新文件
windows

2.1看看這兩個文件
serviceInstaller1:


用的多的屬性:服務器

  • DelayedAutoStart:是否自動啓動
  • Descrition:介紹服務(自定義)
  • DisplayName:標識服務器友好名稱(自定義)
serviceProcessInstaller1:

  • Account:設置爲LocalSystem(運行此服務的帳戶類型)

到此,一個服務就寫好,只是他尚未任何靈魂(業務邏輯)app

三:怎麼編寫咱們的業務邏輯?(在哪裏注入咱們的靈魂)

3.1打開Service1類,按F7進入代碼界面,以下圖所示:


當前類有3個方法:運維

  • Service1:構造函數
  • OnStart:啓動服務時會觸發的方法(能夠傳遞參數)
  • OnStop:結束服務時會觸發的方法

3.2咱們在OnStart和OnStop進行日誌打印,代碼以下:

public Service1()
        {
            InitializeComponent();
            eventLog1 = new System.Diagnostics.EventLog();
            if (!System.Diagnostics.EventLog.SourceExists("MySource"))
            {
                System.Diagnostics.EventLog.CreateEventSource(
                    "MySource", "MyNewLog");
            }
            eventLog1.Source = "MySource";
            eventLog1.Log = "MyNewLog";
        }

        protected override void OnStart(string[] args)
        {
            eventLog1.WriteEntry("In OnStart.");
            LogHelper.loginfo.Info("In OnStart.");
        }

        protected override void OnStop()
        {
            eventLog1.WriteEntry("In OnStop.");
            LogHelper.loginfo.Info("In OnStop.");
        }

這裏,我使用兩種日誌進行打印咱們的日誌信息ide

  • EventLog:這個是系統自帶一個控件(也是微軟教程中使用的日誌記錄)
  • log4net:這個是一個第三方庫日誌程序集

看看效果:

Eventlog:(日誌數量有限制,超過必定的數量就不會在顯示了)

log4net:(自定義,想怎麼存,怎麼存【推薦】)
函數

四:編寫好的服務,如何安裝?(安裝發動機)

4.1首先編譯程序(快捷鍵:CtrL+Shift+B),生成項目

4.2找到目標文件

  • 右鍵項目,選擇在文件資源管理器中打開文件夾
  • 找到Debug文件夾下面後綴爲****.exe程序
  • 賦值路徑:絕對路徑,類是於:[D:****.exe]
  • 看看路徑【C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2019\Visual Studio Tools】,找到工具:Developer Command Prompt for VS 2019容許啓動

4.3 在打開的CMD【就是上面打開的Developer Command Prompt for VS 2019程序,不是咱們Win+R打開的】中,輸入命令:

InstallUtil.exe C:\**\test\bin\Debug\test.exe


如上圖標識已經安裝成功!工具

五:安裝好,如何啓動?(點火啓動)

輸入命令:學習

net start 你定義的服務的名稱【二:如何建立WindowService=>2.添加安裝程序=>DisplayName】

如上圖表示啓動成功3d

六:不想用了,如何中止?(關火休息)

輸入命令:

net stop 你定義的服務的名稱【二:如何建立WindowService=>2.添加安裝程序=>DisplayName】

如上圖表示關閉成功

七:不想要了,如何卸載?(拆掉髮動機)

輸入命令:

InstallUtil.exe /u C:\**\test\bin\Debug\test.exe

如上圖表示卸載成功

1.找到 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2019\Visual Studio Tools】,找到工具:Developer Command Prompt for VS 2019 啓動

2.輸入InstallUtil.exe D:\**\**.exe,回車安裝服務

3.輸入:net start SundyService (啓動服務)

4.輸入:net stop SundyService (中止服務)

5.輸入InstallUtil.exe /u  D:\**\**.exe 卸載服務

八:參考文檔

建立 Windows 服務應用

九:總結

我爲何要作這個WindwoService,是公司須要作一個運維軟件,須要編寫一個Windows服務,我也是看着官方文檔學習的,業務邏輯比較簡單, 開發也挺快的。
本身對Window服務理解,咱們其實這種服務也是一個程序,只是它集成到Windows系統服務中,這樣有一個好處,能夠設置開機自動啓動,並且還神不知鬼不覺,在客戶電腦上安裝,客戶也不知道,咱們是作運維監控,不是幹壞事。能夠把一些須要執行的任務,作成服務,放在服務器或本身電腦服務上,就能夠自動跑,設置開機自起。

十:不足的地方

  • 本文沒有介紹 EventLog是怎麼來:這個在工具箱中,能夠找到,而後點擊Service1,作進來就好了
  • 服務默認是啓動和中止方法,還能夠擴展,有暫停,恢復,這兩個方法,須要咱們重寫才能觸發事件
  • 園友提供:Topshelf有興趣試試
相關文章
相關標籤/搜索