服务windows服务+辅助角色服务

news2024/10/3 2:24:56

 1、vs2022新建一个windows服务项目

2、修改服务参数

(1)AutoLog: 是否将事件写入到windows的事件日志中。

(2)canpauseandContinue:服务是否可以暂停和继续

3、添加服务安装程序 在界面内右击鼠标 新建一个服务、新建后如下图:

4、选中serviceProcessInstaller1点右键,选择“属性”,打开serviceProcessInstaller1的属性面板:

Account:指示用来运行此服务的账户类型,默认选择User,修改为高权限的LocalSystem

 5、

选中serviceInstaller1点右键,选择“属性”,打开serviceInstaller1的属性面板

  • ServiceName:在Windows服务里面显示的名称
  • Description:在Windows服务里面显示的描述信息
  • StartType:指示启动此服务的方式和时间 Manual:手动启动 Automatic:自动启动
  • DelayedAutoStart:指示服务是否延时启动,默认false,改为True,则表示服务延时启动

二、安装和卸载Windows服务

1、在命令行下面执行“installutil+生成的可执行文件的路径”的命令进行安装

2、卸载Windows服务:

在命令行里面输入“installutil /u 可执行文件路径”命令,然后回车

服务安装步骤:

1、使用管理员权限运行CMD;

        备注:安装和卸载时我们都需要用到微软提供的工具InstallUtil.exe

        默认位置在:C:\Windows\Microsoft.NET\Framework

2、安装服务

C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe D:\2.Package\c#\Text\WindowsService.FirstS\bin\Debug\WindowsService.FirstS.exe

 D:\2.Package\c#\Text\WindowsService.FirstS\bin\Debug 为应用程序的物理路径。

3、卸载服务

         卸载服务和安装服务的区别主要在 /u

C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /u D:\2.Package\c#\Text\WindowsService.FirstS\bin\Debug\WindowsService.FirstS.exe

卸载应用程序的路径:D:\2.Package\c#\Text\WindowsService.FirstS\bin\Debug

 注意:启动和终止服务可以封装成两个.bat 文件来进行注册和卸载服务。

4、启动服务指令如下:

        Net start ServiceName

        备注:如果需要跟随系统启动需要设置服务的启动方式为自动

5、终止服务指令如下:

        Net Stop ServiceName;

无法调试需要将当前程序附加到一个进程中

使用和调试服务程序时需要进行停止服务后然后在继续运行

如果封装成服务并且使用json配置文件,注意json的存放路径,如果设置

 var config = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("AppSettings.json", false, true).Build();

则必须将json文件放置到"C:\Windows\SysWOW64"目录下

三、使用Net6新建服务

        首先新建一个项目

完成之后,安装nuget包(一个是windows服务, 一个是linux服务)

Install-Package Microsoft.Extensions.Hosting.WindowsServices
Install-Package Microsoft.Extensions.Hosting.Systemd

项目完成后,打包生成。

work services项目介绍:

Worker Service是微软提供的一个项目模板,它继承于BackgroundService。在使用.NET Framework时,我们可以使用Windows Service来创建Windows服务,而在使用.NET Core及更高的.NET版本时,就可以使用Worker Service来取代Windows Service,以便创建跨平台服务。
项目创建成功后,windows会预设一个worker Service的模板,它主要文件为program.cs和worker.cs 提供了服务的启动入口,而work则是服务的具体功能实现。

打开program.cs可以看到 他使用了CreateHostBuilder方法返回了一个田间Worker类作为托管服务的host,然后调用它的Build方法生成实例并调用Run方法来运行该实例。整个Program.cs的结构与普通的控制台应用程序基本相同。

应用过程
接下来我们来使用Worker Service创建一个简单Demo服务,具体实现功能就是在一个日志文件中定时记录一些消息。

首先我们创建一个InfoLogWorker类,并使其继承于BackgroundService类,并将Program配置的服务改成InfoLogWorker。

可以看到,BackgroundService提供了三个虚方法和一个抽象方法,我们需要对StartAsync、StopAsync和ExecuteAsync三个方法进行重写。

其中StartAsync会在服务开启时被调用,而StopAsync则是在服务停止时被调用,ExecuteAsync是必须要被实现的方法,它定义了服务运行时需要执行的操作。

在重写完成这个三个方法之后,我们再创建一个ILogger的只读字段,并在构造函数中获取它的实例,之后将会使用它在调试时打印出我们需要的信息。然后我们再定义一个ServiceRunningMethod方法,用以定义服务运行时需要实现的具体功能。
 

部署为服务运行

使用bat脚本进行部署

install.bat

set current_path=D:\Package\Code\C#\6.service\Text\Learn.Text01\Learn.Text01\bin\Debug\net6.0\
sc create WorkerServiceDemo binPath= "D:\Package\Code\C#\6.service\Text\Learn.Text01\Learn.Text01\bin\Debug\net6.0\Learn.text01.exe"
sc description WorkerServiceDemo  "Text my server01"
sc config WorkerServiceDemo start= auto
sc start WorkerServiceDemo

unitstall.bat

sc stop WorkerServiceDemo
sc delete WorkerServiceDemo

异常:

        提示错误1053:服务没有及时响应或控制请求。(有可能没有安装。net运行环境)

修改如下:

.ConfigureServices(services =>
                {
                    var processModule = Process.GetCurrentProcess().MainModule;
                    if(processModule is not null) {
                        var pathtoExe = processModule.FileName;
                        var pathContetRoot = Path.GetDirectoryName(pathtoExe);
                        Directory.SetCurrentDirectory(pathContetRoot);

                    }
                    services.AddHostedService<Worker>();
                })

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/584607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【运维】speedtest测试

目录 docker 布署 布署云端 docker布署 云端放置于已有容器里 librespeed/speedtest: Self-hosted Speedtest for HTML5 and more. Easy setup, examples, configurable, mobile friendly. Supports PHP, Node, Multiple servers, and more (github.com) docker 布署 获取…

探讨生产环境下缓存雪崩的几种场景及解决方案

本文首发自「慕课网」&#xff08;www.imooc.com&#xff09;&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"或慕课网公众号&#xff01; 作者&#xff1a;大能 | 慕课网讲师 缓存我们经常使用&#xff0c;但是有时候我们…

如何撤消 Git 中最新的本地提交?

在使用Git进行版本控制时&#xff0c;有时我们可能会犯下错误或者想要撤销最新的本地提交。Git提供了一些强大的工具和命令&#xff0c;使我们能够轻松地撤消最近的提交并修复错误。 本文将详细介绍如何在Git中撤消最新的本地提交。 步骤1&#xff1a;查看提交历史 在撤消最新…

Centos7安装Java8(在线安装避坑详细安装)

开篇语&#xff1a; 喜欢在一个明媚阳光的午后 坐在那夕阳斑驳的南墙下 听着风起 闻着花香 望着远山 身边是你 如此便觉得很好 1.查看目前环境 rpm -qa|grep jdk在这里我们会发现&#xff0c;原有系统安装有jdk&#xff0c;如果对于jdk有要求&#xff0c;我们就需要重新安装jdk…

Liunx网络基础(3)传输层(TCP/UDP)可靠传输、字节流传输等

传输层协议 传输层协议解析: 负责两端之间的数据传输; TCP/ UDP 1. UDP UDP: 用户数据报协议&#xff0c;无连接&#xff0c;不可靠&#xff0c;面向数据报传输 重点: 协议格式&#xff0c;协议特性&#xff0c;特性对于编程的影响 协议格式&#xff1a; 16位源端口 & 16位…

2023-05-29 用 fltk gui库编写一个打字练习程序

用 fltk gui库编写一个打字练习程序 前言一、FLTK GUI 库二、使用步骤1.引入库2.使用代码 总结 前言 给孩子练习键盘打字, 发现终端还是欠点意思, 研究了一下gui, 最终用 fltk库弄了一个. 对于没有接触过gui的人, 发现, 编程的逻辑和终端区别很大, 很繁琐, 可能需要适应适应,…

Windows远程Centos7图形化界面

一、centos7服务器安装tigervnc 1、更新yum源 yum update 2、安装tigervnc yum -y install tigervnc* 3、启动vnc vncserver &#xff08;1&#xff09;执行命令后需要输入密码 &#xff08;2&#xff09;再次输入密码 注意&#xff1a;密码一定要记住&#xff0c;方便以…

链表反转方法汇总

反转范围之前有节点&#xff0c;prev就指向该节点&#xff0c;没有就prevnull&#xff1b; 一、头插法 class Solution {public ListNode reverseList(ListNode head) {ListNode header new ListNode(-1);ListNode cur head;while(cur ! null) {ListNode tmp cur.next;cur.…

LabVIEWCompactRIO 开发指南第六章41 同步模块

同步模块 同时运行的模块每个通道有一个ADC&#xff0c;并且采集数据时通道之间没有明显的偏差。同步模块的两个子类别&#xff0c;按需和三角积分&#xff0c;通过SPI总线传输数据&#xff0c;并受到其他SPI总线模块的所有规格和挑战的约束。 按需转换 表6.1.具有按需转换的…

Postgresql源码(104)子连接提升过程pull_up_sublinks

1 场景构造 drop table student; create table student(sno int primary key, sname varchar(10), ssex int); insert into student values(1, stu1, 0); insert into student values(2, stu2, 1); insert into student values(3, stu3, 1); insert into student values(4, st…

模块化

一、目标 能够说出模块化的好处能够知道CommonJS规定了哪些内容能够说出Node.js中模块的三大分类各自是什么能够使用npm管理包能够了解什么是规范的包结构能够了解模块的加载机制 二、目录 模块化的基本概念Node.js中模块的分类npm与包模块的加载机制 1.模块化的基本概念 …

spring源码解读

深入了解Spring Bean Java bean和spring bean区别 Java bean的属性私有&#xff0c;只能通过get和set方法来对属性进行操作。Spring bean是由spring容器生成和管理的对象。 spring Bean的定义方式 xml文件 。 声明式。 bean注解。 声明式。 component注解。声明式。 Bea…

房产中介APP开发功能有哪些?

房产中介APP开发功能有哪些&#xff1f; 1. 发布信息。中介或房东通过房地产中介APP客户端发布出租房屋的相关信息。 2. 房屋搜查。根据不同类型的房源进行分类&#xff0c;如公寓、整租、合租、写字楼、办公楼等&#xff0c;也可以根据不同的位置信息、商圈、距…

2023年下半年软考高级需要报班吗?

首先&#xff0c;对于软考高级考试报班与否的问题&#xff0c;需要根据自身的情况来做出决定。如果你有较强的自学能力&#xff0c;且具备丰富的实际工作经验和技术知识&#xff0c;那么不报班也完全可以自学备考。但如果你对软件工程的知识掌握程度较低&#xff0c;或者时间紧…

算法01-算法概念与描述

文章目录 总结大纲要求算法概念举个例子&#xff1a;量水问题 算法描述算法的时间复杂度 总结 本系列为C算法学习系列&#xff0c;会介绍 算法概念与描述&#xff0c;入门算法&#xff0c;基础算法&#xff0c;数值处理算法&#xff0c;排序算法&#xff0c;搜索算法&#xff…

软件测试炸了,作为从业者,你做好准备了吗?

软件测试行业已经发生很大变化&#xff0c;你跟上变化了吗&#xff1f; 岗位少不可怕&#xff0c;要求越来越高也不可怕&#xff0c;可怕的是&#xff0c;软件测试行业已经发生巨变&#xff0c;而你却原地踏步&#xff01;目前一线大厂更多倾向于招收测试开发&#xff0c;或者…

06. 数据结构之散列表

前言 散列表也叫作哈希表&#xff08;hash table&#xff09;&#xff0c;这种数据结构提供了键&#xff08;Key&#xff09;和值&#xff08;Value&#xff09;的映射关系。只要给出一个Key&#xff0c;就可以高效查找到它所匹配的Value&#xff0c;时间复杂度接近于O(1) 1.…

photoshop矫正扫描图片的倾斜问题以及修改图片内容

由于工程原因&#xff0c;资料需要重新梳理 1.扫描工程表格到电脑中 2.在ps中导入表格内容&#xff08;表格有时候是倾斜的&#xff09; 需要修正为正常状态&#xff0c;即垂直状态 设置步骤&#xff1a; 1.调整ps的背景颜色与所在图片的背景颜色一致 用吸管工具&#xff…

AbandonedConnectionCleanupThread$ConnectionFinalizerPhantomReference内存溢出

网上查了查资料&#xff0c;根据自己情况在这里整理了一下&#xff0c;供大家学习和参考。 目录 1、现象 2、mysql-connector-java 源码分析 3、解决方法 3.1、配置disableAbandonedConnectionCleanup 3.2、暴力解决方式-----定时GC 4、什么是虚引用 5、关联对象真的被回…

数据可视化:趋势类可视化图表大全

图表是处理数据的重要组成部分&#xff0c;因为它们是一种将大量数据压缩为易于理解的格式的方法。数据可视化可以让受众快速Get到重点。 数据可视化的图表类型极其丰富多样&#xff0c;而且每种都有不同的用例&#xff0c;通常&#xff0c;创建数据可视化最困难的部分是确定哪…