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

相关文章
相关标签/搜索