Web开发:使用C#创建、安装、调试和卸载服务

news2024/11/18 13:30:30

目录

一、创建服务

1.创建项目(.NET Framework)

 2.重命名

3.编写逻辑代码

 二、安装服务

1.方案一:利用VS2022安装文件的配置

选择添加安装程序

安装文件的介绍及配置

​编辑​ 重新编译

工具安装

2.方案二:编写bat脚本安装服务

 重新编译

创建bat

运行bat 

三、调试服务

1.服务运行的原理

2.调试

(1)建议:定时器间隔小一点,好调试

(2)步骤:

(3)更好的调试方法:

四、卸载服务

方案一:VS2022配置卸载方法

 方案二:bat脚本卸载方法:一停二删


一、创建服务

需求:每隔20秒写一次日志

1.创建项目(.NET Framework)

上面这个是最新的.NET(Core)的服务,我演示的是下面这个Windows服务

如果你没有这个模板,确保你安装了以下的工具:

 2.重命名

改名为MyService,这个只是一个类名,不是最后的服务名,不改也可以:

​ 我还是习惯改一下:

3.编写逻辑代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using System.Threading.Tasks;


namespace WindowsService1
{
    public partial class MyService : ServiceBase
    {
        private Timer _timer;//引用的是using System.Threading;
        private readonly TimeSpan _interval = TimeSpan.FromSeconds(20);//时间间隔20s
        public MyService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)//服务开启自动调用该方法
        {
            _timer = new Timer(WriteTimeToFile, null, TimeSpan.Zero, _interval);//调用WriteTimeToFile方法,传递参数null,启动服务后立即实行一次,间隔20s执行
            File.AppendAllText("log.txt", "服务已开启!\n");
        }

        protected override void OnStop()//服务停止自动调用该方法
        {
            File.AppendAllText("log.txt", "服务已停止!\n");
        }

        private void WriteTimeToFile(object state)
        {
            string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log.txt");//path = 当前目录+"log.txt"
            File.AppendAllText(path, $"{DateTime.Now}: 当前时间记录\n");//写入一定内容(可以写你自己的逻辑)
        }
    }
}

【备注】new System.Threading.Timer(Method, objects, a, b); 这四个参数的含义:

  •     Method: 定时器触发时要调用的方法。
  •     objects: 定时器向Method传递的参数,不传递时可为null。
  •     a(int): 第一次调用定时器的方法之前的延迟时间(毫秒),如果设置为 TimeSpan.Zero,定时器将在创建时立即执行回调方法Method。
  •     b(int) :定时器调用方法的间隔时间(毫秒),如果设置为 TimeSpan.Zero,定时器将仅执行一次,不会重复调用。

 二、安装服务

以下两个安装方案,二选一即可!

1.方案一:利用VS2022安装文件的配置

选择添加安装程序

安装文件的介绍及配置

右键它们两个的属性,分别配置以下内容:

​ 重新编译

安装好后,重新编译该类库

工具安装

 然后使用命令行安装,首先用管理员身份打开cmd,然后输入以下命令进入到安装工具路径:

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319

 执行安装命令(注意改路径)

InstallUtil  F:\C_program\ComputerServices_demo\WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe

测试发现程序正常运行:

2.方案二:编写bat脚本安装服务

 重新编译

首先,重新编译该类库

创建bat

第二,创建一个"安装服务.txt"文件,写入以下内容(二选一即可,记得改路径),然后将后缀改为bat

这里的命名TestService是自由的,如何命名都可以,路径是编译类库后debug输出的exe的路径(注意改路径改和服务名)

@echo off
sc create TestService binPath= "F:\C_program\ComputerServices_demo\WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe" start= auto
sc start TestService
echo Service installed and started.
pause

 更便捷的写法:%~dp0 表示当前目录

@echo off
sc create TestService binPath= "%~dp0WindowsService1.exe" start= auto
sc start TestService
echo Service installed and started.
pause

 

运行bat 

第三步,【右键】-【管理员身份运行】-【安装服务】

出现下图说明安装好了!

三、调试服务

1.服务运行的原理

        将 C# 代码编译成 .exe 文件,并将该 .exe 文件安装为 Windows 服务后,实际运行的是这个 .exe 文件。虽然服务的生命周期由 Windows 服务管理,但服务内部的操作实际上是由 .exe 文件执行的。

        举个例子,爸爸(C#)编写了一个程序,并生成了小明(.exe)。小明去学校(服务),在学校中由老师(Windows 服务)来管理他的上学和放学时间(启停服务)。尽管学校负责管理小明的时间表,但小明在学校里执行的任务(.exe 的代码逻辑)决定了他完成的具体工作或效果。

2.调试

(1)建议:定时器间隔小一点,好调试

(2)步骤:

第一步,停止你的服务

第二步,重新编译你的服务类库(修改代码都要重新编译,重新编译会生成一个新的exe,如果不停止你的服务,将无法生成新的exe!导致编译失败,服务不能正常更新)

 第三步,启动你的服务

 第四步,VS2022附加类库生成的exe到进程,然后断点调试:

成功进入断点:

(3)更好的调试方法:

四、卸载服务

注意,理论上卸载方案二选一即可!推荐方案二,更快更简单~

方案一:VS2022配置卸载方法

 然后使用命令行安装,首先用管理员身份打开cmd,然后输入以下命令进入到安装工具路径:

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319

 执行卸载命令(注意改路径)

InstallUtil  /u F:\C_program\ComputerServices_demo\WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe

管理员身份打开cmd尝试执行,发现已经卸载成功(注意改服务名)

sc delete TestService

 方案二:bat脚本卸载方法:一停二删

 打开服务,停掉这个服务

 管理员身份打开cmd尝试执行,发现已经卸载成功(注意改服务名)

sc delete TestService

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

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

相关文章

SCRM电商管理后台Axure高保真原型 源文件

在电商行业蓬勃发展的今天,企业急需一个全面的客户关系管理(CRM)系统来优化他们的电商运营。我们的Scrm电商管理后台应运而生,它不仅是一个集中化的管理平台,更是企业提升客户互动和销售业绩的得力助手。 预览地址 ht…

yolo8训练自己的模型

1.数据源准备 1.1 准备图片资源 1.2 对图片资源标注,生成 对应的 .txt 文件,里面的数字表示 物体被标注的 x或y 等坐标点信息 1.2.1 标注工具下载以及使用教程参考 Windows 10下安装labelImg标注工具!_labelimg windows exe 1.5版本-…

YOLOv5 Detect.py 改变检测框box线条的粗细,隐藏检测框的检测信息,只显示检测框box

Ctrl F 搜索 line_thickness 修改值 值越小 线条越细 hide-labels 隐藏检测框的类别信息 hide-conf 隐藏检测框的置信度信息

【OpenAPI】Spring3 集成 OpenAPI 生成接口文档

Spring3 集成 OpenAPI 生成接口文档 1. 依赖 Spring 版本&#xff1a;3.0.5 Java 版本&#xff1a;jdk21 OpenAPI 依赖&#xff1a; <!-- https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui --> <dependency><groupI…

jdk环境变量配置+eclipse配置jdk

文章目录 安装jdkjdk环境变量配置eclipse里边配置jdkeclipse覆盖率插件——EclEmma的安装和使用 安装jdk 在安装前可以先建两个文件夹&#xff0c;注意不要文件夹用英文&#xff0c;不要用中文&#xff0c;如图&#xff1a; 然后我们开始安装 然后就看我们有没有安装成功…

代码随想录day22|回溯法03

一、90.子集Ⅱ 90. 子集 II - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 这道题目和78.子集 (opens new window)区别就是集合里有重复元素了&#xff0c;而且求取的子集要去重。 那么关于回溯算法中的去重问题&#xff0c;在40.组合总和II (opens new window…

实际案例(7)你遇到这样的环境,如何解决?(这是一道讨论题)

服务器有两个外网的时候&#xff0c;如何都能通过外网访问服务 环境介绍&#xff1a;一个非常普通的环境&#xff0c;但是怪就怪在服务器这块&#xff0c;服务器有两个网卡&#xff0c;他本身有一个外网上网&#xff0c;这个时候客户想把这个服务器加入到防火墙的网络里面来&am…

为什么sqlynx是连接国产数据库的最佳选择?

1. 广泛的国产数据库支持 SQLynx除了国际上的主流数据库外&#xff0c;还支持多种国产数据库&#xff0c;如达梦、人大金仓、OceanBase、openGauss等。随着国产数据库市场的不断发展和成熟&#xff0c;越来越多的企业和机构开始选择国产数据库来满足其数据管理需求。SQLynx通过…

R134a制冷剂简介

目录 一、基本性质 二、环保特性 三、应用领域 1. 制冷空调行业 2. 工业制造行业 3. 气雾剂和推进剂行业 4. 发泡剂行业 5. 其他行业 四、使用注意事项 1. 安全性方面 2. 系统兼容性方面 3. 操作规范方面 4. 存储和运输方面 R134a制冷剂,也被称为四氟乙烷(CF3CH…

stm32 SPI通信外设(硬件SPI读写W25Q64)

理论 1.SPI外设简介 STM32内部集成了硬件SPI收发电路&#xff0c;可以由硬件自动执行时钟生成、数据收发等功能&#xff0c;减轻CPU的负担 可配置8位/16位数据帧、高位先行/低位先行 时钟频率&#xff1a; fPCLK / (2, 4, 8, 16, 32, 64, 128, 256) 支持多主机模型、主或从操作…

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目&#xff1a; 题解&#xff1a; class Solution { public:static const int MASK1 1 << 7;static const int MASK2 (1 << 7) (1 << 6);bool isValid(int num) {return (num & MASK2) MASK1;}int getBytes(int num) {if ((num & MASK1) 0) …

WhatsApp修复重大隐私漏洞,‘阅后即焚’功能安全隐患引关注

据BleepingComputer报道&#xff0c;全球拥有20亿用户的即时通讯应用WhatsApp近期修复了一个关键的隐私漏洞。该漏洞允许攻击者多次查看用户发送的“阅后即焚”&#xff08;View once&#xff09;内容。 WhatsApp的“阅后即焚”功能于三年前推出&#xff0c;允许用户发送只能查…

VSCode 渲染 markdown md , 设置插件的背景颜色 Markdown Preview Enhanced

起因&#xff0c; 目的: VSCode 中&#xff0c; 安装 Markdown Preview Enhanced 这个插件之后&#xff0c;能渲染&#xff0c;但是背景颜色太亮了。 最近正在学习 css, 所以一试身手。 先看效果&#xff1a; 过程: Ctrl Shift P 打开命令面板。输入: Markdown Preview…

【踩坑】装了显卡,如何让显示器从主板和显卡HDMI都输出

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 背景介绍 装了显卡后&#xff0c;开机默认是从显卡的HDMI输出&#xff0c;但这很不方便。如何让视频仍然从主板输出&#xff1f;或者说让显卡HDMI和主板…

漏洞披露-信呼-OA

更多网安漏洞复现&#xff0c;可前往无问社区查看http://wwlib.cn/index.php/artread/artid/16564.html 0x01 产品简介 泛微数字化运营管理平台OA为组织提供从“可信数字身份、电子化流程审批、个性化岗位信息门户、 知识文档管理、电子化签署到内外协同的业务管理” 0x02 漏…

QT 基础学习

1> 使用绘制事件完成钟表的绘制 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QDebug> #include <QTime> #include <QTimer> #include <QDateTime> //#include <string> #includ…

发送成绩的app或小程序推荐

老师们&#xff0c;新学期的第一次月考马上开始&#xff0c;是不是还在为如何高效、便捷地发布成绩而头疼呢&#xff1f;别担心&#xff0c;都2024年了&#xff0c;我们有更智能的方式来解决这个问题&#xff01; 给大家安利一个超级实用的工具——易查分小程序。这个小程序简…

esp32-C2 对接火山引擎实现智能语音(一)

目录 一、火山引擎大模型简介 1)火山引擎网址: 2)首先需要先注册火山引擎账号 3)语音识别——即语音转为文本 一句话识别 流式语音识别 录音文件识别标准版 录音文件识别极速版 4)语音合成——文本转音频 一、火山引擎大模型简介 火山引擎的智能语音技术,基于业界先…

ORCA-3D避障算法解析

二维ORCA原理参考&#xff1a; https://zhuanlan.zhihu.com/p/669426124 ORCA原理图解 1. 找到避障速度增量 u 碰撞处理分为三种情况&#xff1a; &#xff08;1&#xff09;没有发生碰撞&#xff0c;且相对速度落在小圆里 &#xff08;2&#xff09;没有发生碰撞&#xff0…

C++---string类常见接口

介绍 string类详情>>>https://cplusplus.com/reference/string/string/?kwstring 1. string是表示字符串的字符串类&#xff08;感觉就像一个动态的字符数组&#xff09; 2. 该类的接口与常规容器的接口基本相同&#xff0c;再添加了一些专门用来操作string的常规操作…