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

目录

一、创建服务

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.mfbz.cn/a/879000.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【嘉立创EDA】画PCB板中为什么要两面铺铜为GND,不能一面GND一面VCC吗?

在新手画板子铺铜时,经常会铺一面GND一面VCC。但一般情况下我们不会这样铺铜。下面将详细分析为什么要两面铺铜为GND,而不是一面GND一面VCC的原因: 提高散热能力 金属导热性:金属具有良好的导热性,铺铜可以有效分散PCB…

Oracle 19c异常恢复—ORA-01209/ORA-65088---惜分飞

由于raid卡bug故障,导致文件系统异常,从而使得数据库无法正常启动,客户找到我之前已经让多人分析,均未恢复成功,查看alert日志,发现他们恢复的时候尝试resetlogs库,然后报ORA-600 kcbzib_kcrsds_1错误 2024-09-15T17:07:32.55321508:00 alter database open resetlogs 2024-09-…

Debian11之DolphinScheduler使用

登录 默认用户名和密码 admin/dolphinscheduler123 http://192.168.111.180:12345/dolphinscheduler/ui基础配置 1、创建Worker【admin用户下】 创建项目的时候会指定Worker,这个配置决定了项目中的任务在哪个服务器执行 2、创建环境【admin用户下】 - 如果涉…

Linux搭建邮箱服务器(简易版)

本章是上一文档的简易版本搭建方式更为快速简洁(只需要两条命令即可搭建),如果想了解更详细一些可以看我上一文档 Linux接发邮件mailx_linux mailx o365-CSDN博客文章浏览阅读857次,点赞25次,收藏19次。本文详细描述了…

spring security OAuth2 搭建资源服务器以及授权服务器/jdbc/jwt两种方案

一、认证服务器基于jdbc方式 如果不懂请移步上一篇文章:Spring security OAuth2 授权服务器搭建-CSDN博客 在上一篇文章中,TokenStore的默认实现为 InHenoryTokenStore 即内存存储,对于 CLient 信息,userDetaitsServce 接负责从存…

mqtt整体了解

整个系统的分布及功能 参考太极创客视频 整体分为三部分: 发布:实时发送到云平台;实现主体是传感器或被控对象 订阅:得到能够访问发布信息;主体是有查看和控制权限的对象 云平台:可以理解为有控制订阅者权…

Python 爬虫入门 - Request 静态页面数据获取

在现代 Web 开发中,HTTP 请求(Request)是与服务器进行通信的核心操作。无论是在前端还是后端开发中,数据的获取、传递以及处理都离不开请求的应用。特别是在静态页面的数据获取中,使用请求可以将页面变得更加动态和互动,从而大大提升用户体验,使得页面内容更加丰富和灵活…

MySQL_SQLYog简介、下载及安装(超详细)

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :&#x1…

行人动作行为识别系统源码分享

行人动作行为识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

Halo 开发者指南——项目运行、构建

准备工作 环境要求 OpenJDK 17 LTSNode.js 20 LTSpnpm 9IntelliJ IDEAGitDocker(可选) 名词解释 工作目录 指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 halo-next 的文件夹,绝对路径为 ~/ha…

网络高级项目( 基于webserver的工业数据采集和控制项目)

目录 一、项目要求: 二、演示效果: 设备端: Modbus用户控制端: 服务器端: 网页端: 三、 项目代码: Modbus用户控制端代码: 服务器端代码: 网页端代码&#xff1…

VirtualBox Install MacOS

环境搭建 git clone https://github.com/myspaghetti/macos-virtualbox 脚本配置 修改macos-guest-virtualbox.sh部分内容为 vm_name"macOS" # name of the VirtualBox virtual machine macOS_release_name"Catalina" # install &quo…

股指期货的详细玩法功能与应用解析

股指期货作为一种重要的金融衍生工具,为投资者提供了多样化的投资和风险管理手段。本文将详细探讨股指期货的三大主要功能:风险规避、价格发现和资产配置。 第一,风险规避功能 1.套期保值:股指期货的风险规避功能主要通过套期保值…

外观模式详解:如何为复杂系统构建简洁的接口

🎯 设计模式专栏,持续更新中 欢迎订阅:JAVA实现设计模式 🛠️ 希望小伙伴们一键三连,有问题私信都会回复,或者在评论区直接发言 外观模式 外观模式(Facade Pattern)为子系统中的一组…

智能 Uber 发票 PDF 合并工具

在现代商务出行中,尤其是在跨国出差中,处理和整合大量 Uber 发票已成为一项不小的挑战。手动整理和合并这些发票不仅耗时,还容易出错。作为开发者,为什么不开发一个自动化工具,将这些任务交给代码来完成呢?…

成型的程序

加一个提示信息 加上python 常用的包 整个程序打包完 250M 安装 960MB matplot numpy pandas scapy pysearial 常用的包 (pyvisa)… … 啥都有 Python 解释器组件构建 要比 lua 容易的多 (C/Rust 的组件库)

钢材表面缺陷数据集以coco格式做好了数据集的划分,1200张训练集,600张验证集,对应的json文件也在里面

钢材表面缺陷数据集 以coco格式做好了数据集的划分,1200张训练集,600张验证集,对应的json文件也在里面。 钢材表面缺陷检测数据集营销介绍 项目背景: 钢材作为工业生产的重要原材料之一,其表面质量直接影响到成品的性…

MySQL之安装与基础知识

目录 一:在centos7上安装MySQL数据库 1.卸载默认存在的环境 2.配置mysql的yum源 3. 安装MySQL 4.登录mysql 5.设置MySQL的配置文件 二:MySQL基础知识 1.什么是数据库 2.主流数据库 3.服务器,数据库,表关系及使用案例 4…

预训练发展

预训练发展 1.ELMo2.GPT3.Bert3.1Ernie-baidu3.2Ernie- Tsinghua 4.GPT25.UNILM6.Transformer-XL & XLNet6.1方案一6.2方案三 7.Roberta8.SpanBert8.1SBO简介: 9.ALBERT9.1方案一9.2方案二9.3方案三 10.T511.GPT312.从"续写"到"回答"12.1SF…

基于51单片机的直流数字电流表proteus仿真

地址: https://pan.baidu.com/s/1adZbhgOBvvg0KsCO6_ZiAw 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectro…