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

news/2024/11/16 20:22:49/

 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.exeD:\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:服务没有及时响应或控制请求。

修改如下:

.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.ppmy.cn/news/102171.html

相关文章

机器学习-10 聚类算法

聚类算法 算法概括聚类&#xff08;clustering&#xff09;聚类的概念聚类的要求聚类与分类的区别 常见算法分类聚类算法中存在的问题 距离度量闵可夫斯基距离欧式距离&#xff08;欧几里得距离&#xff09;曼哈顿距离切比雪夫距离皮尔逊相关系数余弦相似度杰卡德相似系数 划分…

从零开始的力扣刷题记录-第四十一天

力扣每日四题 653. 两数之和 IV - 输入二叉搜索树-简单671. 二叉树中第二小的节点-简单819. 最常见的单词-简单24. 两两交换链表中的节点-中等总结 653. 两数之和 IV - 输入二叉搜索树-简单 题目描述&#xff1a; 给定一个二叉搜索树 root 和一个目标结果 k&#xff0c;如果二…

工具-Ditto与X mouse Button,自定义热键复制粘贴Ctrl C /V,解放双手

文章目录 1、使用演示2、使用方法3、更新&#xff0c;鼠标一键实现复制粘贴3.1 使用方法 1、使用演示 不需要同时摁下ctrl c /v 就可以在键盘上实现一键复制粘贴&#xff0c;其实去网上有外接的键盘&#xff0c;大概20元左右&#xff0c;外接键盘只有两个摁键&#xff0c;就是…

realman——控制真实的机械臂

概述 MoveIt!完成运动规划后的输出接口是一个命名为“FollowJointTrajectory”的 action,其中包含了一系列规划好的路径点轨迹,与使用 MoveIt!控制 Gazebo中的机械臂不同的是,虚拟机械臂有 gazebo 的 ros_control 插件自动帮我们获取了follow_joint_trajectory 的动作 acti…

上饶广信区个体私营经济协会新班子力争打造全国样板

5月26日下午&#xff0c;江西省上饶市广信区个体私营经济协会第二届理事会暨会员代表大会在上饶京都国际大酒店隆重召开&#xff0c;来自协会的200多名理事会员单位及社会各界嘉宾、媒体代表共计300余人参加了此次大会。本次大会成功举行了换届大会&#xff0c;通过举手表决方式…

Spring:六、ProxyFactory使用

Spring&#xff1a;六、ProxyFactory使用 1 前言 Spring提供了编程式AOP代理方式&#xff0c;而不依赖于Spring Ioc&#xff0c;即ProxyFactory。使用此种方式可以很方便的使用JDK动态代理或CGLIB代理&#xff0c;且支持Advisor chain的使用&#xff0c;可以通过advisor链&am…

【华为OD统一考试B卷 | 100分】字符串分割(C++ Java JavaScript Python)

文章目录 题目描述输入描述输出描述ACM输入输出模式用例机考代码查重C++javapythonpython题目描述 给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。 对于新组成的每一个子串,如果它含…

差动测试棒如何连接到示波器

差动测试棒提供一个安全的绝缘仪器给示波器使用&#xff0c;它可以转换由高输入的差动电压进入一个低电压并且显示波形在示波器上&#xff0c;使用频率高达100MHz&#xff0c;非常适合大电力测试、研发使用。 差动测试棒输出标是设计在操作示波器1MΩ的输入阻抗的相对衰减量&a…