• Windows服务/Linux守护创建及安装


    前言说明

    在微软技术栈中,众所周知有一类项目是用于支持WindowService,并且目前只支持Windows系列的系统。而项目的创建、调试、安装都相对新接触的朋友而言还是比较复杂。

    在这里介绍一种相对于简单、明了的组件,同时可以支持Linux守护(需要目标框架.Net Core 3.1以上的版本);

    NewLife.Agent(支持.Net Framework4.0以上、.Net Core、.Net5.0),新生命团队(大石头)开发维护的组件,也希望大家可以加入共同探讨,QQ群:1600800

    使用工具:VS2019

    项目建立、安装步骤

    1、标准的Windows服务建立和安装,这里就不多介绍了,各位百*、*歌自行查询相关资料.......

    2、建立控制台应用程序项目,目标框架各位操作的时候自行看需求选择

    3、nuget安装NewLife.Agent,建立Service类,继承NewLife.Agent.ServiceBase类

    NewLife.Agent项目引用版本8.7.2020.802

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

    而Service主要方法在于 StartWork、StopWork

      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);
            }
        }

    4、如何调试?

    在构造方法敲以下代码即可,简单的调试处理(由于1-7基本都在组件上已经给占用了,所有剩下的只有8-9可以根据自己的想法处理,需要更多的自行重构即可)

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

    5、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" />

    各位看了简单的说明对比起来是否相对而言简单些许,如果能帮到各位的话,请大家动动小手指点点推荐,谢谢大家了。

  • 相关阅读:
    效率分页代码
    serialPort控件(串口通信)
    C#事件DEMO
    泛型类
    简单的登陆页面
    hdu 1342+hdu 2660+hdu 2266+hdu 1704+hdu 1627+hdu 1539
    hdu 3987(求割边最小的最小割)
    hdu 1907(尼姆博弈)
    hdu 2149+hdu 1846(巴什博弈)
    hdu 2516(斐波那契博弈)
  • 原文地址:https://www.cnblogs.com/vcode/p/13451145.html
Copyright © 2020-2023  润新知