Windows服務/Linux守護建立及安裝

前言說明

在微軟技術棧中,衆所周知有一類項目是用於支持WindowService,而且目前只支持Windows系列的系統。而項目的建立、調試、安裝都相對新接觸的朋友而言仍是比較複雜。框架

在這裏介紹一種相對於簡單、明瞭的組件,同時能夠支持Linux守護(須要目標框架.Net Core 3.1以上的版本);ide

NewLife.Agent(支持.Net Framework4.0以上、.Net Core、.Net5.0),新生命團隊(大石頭)開發維護的組件,也但願你們能夠加入共同探討,QQ羣:1600800工具

使用工具:VS2019ui

項目創建、安裝步驟

一、標準的Windows服務創建和安裝,這裏就很少介紹了,各位百*、*歌自行查詢相關資料.......

二、創建控制檯應用程序項目,目標框架各位操做的時候自行看需求選擇

三、nuget安裝NewLife.Agent,創建Service類,繼承NewLife.Agent.ServiceBase類

NewLife.Agent項目引用版本8.7.2020.802spa

其中主要修改 Program Main方法調用 new Service().Main(args);調試

而Service主要方法在於 StartWork、StopWorkcode

  class Program
    {
        static void Main(string[] args) => new Service().Main(args);
    }

    class Service : ServiceBase {
        public Service(){
            ServiceName = "榮少-Leif Service ServiceName";//服務名
            DisplayName = "榮少-Leif Service DisplayName";//顯示名
            Description = "榮少-Leif Service Description";//描述
            AddMenu('8', "調試", () => { XTrace.WriteLine($"調試啓動"); StartWork(string.Empty); });
        }
        protected override void StartWork(string reason)
        {
            //任務啓動業務處理
            for (int i = 0; i < 1000; i++)
            {
                XTrace.WriteLine($"{i}--{DateTime.Now}");
                Thread.Sleep(1000);
            }
            base.StartWork(reason);
        }
        protected override void StopWork(string reason)
        {
            //任務中止業務處理
            base.StopWork(reason);
        }
    }

四、如何調試?

在構造方法敲如下代碼便可,簡單的調試處理(因爲1-7基本都在組件上已經給佔用了,全部剩下的只有8-9能夠根據本身的想法處理,須要更多的自行重構便可)blog

AddMenu('8', "調試", () => { StartWork(string.Empty); });

五、WindowService安裝 (因爲權限問題,須要增長應用程序清單文件)、Linux守護安裝(家裏沒有Linux環境,各位自行操做下);

 

修改文件中level="asInvoker"部分level="requireAdministrator"便可繼承

<!-- UAC 清單選項
             若是想要更改 Windows 用戶賬戶控制級別,請使用
             如下節點之一替換 requestedExecutionLevel 節點。n
        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            指定 requestedExecutionLevel 元素將禁用文件和註冊表虛擬化。
            若是你的應用程序須要此虛擬化來實現向後兼容性,則刪除此
            元素。
        -->
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />

 

各位看了簡單的說明對比起來是否相對而言簡單些許,若是能幫到各位的話,請你們動動小手指點點推薦,謝謝你們了。ip

相關文章
相關標籤/搜索