您的位置:首页 > 健康 > 养生 > 平台推广员_徐州做网站建设_内容营销_做网络推广

平台推广员_徐州做网站建设_内容营销_做网络推广

2025/2/24 22:11:39 来源:https://blog.csdn.net/liuchunyu0130/article/details/144187060  浏览:    关键词:平台推广员_徐州做网站建设_内容营销_做网络推广
平台推广员_徐州做网站建设_内容营销_做网络推广

Windows 服务是一种后台运行的应用程序,可以在没有用户界面的情况下执行任务。以下是从概念到具体实现的详细说明。

1. 什么是 Windows 服务

Windows 服务是运行在 Windows 操作系统上的应用程序,具有以下特点:

  • 后台运行:无需用户交互,可在用户登录前启动或注销后继续运行。
  • 自动化任务:适合执行周期性或长期运行的任务。
  • 管理便捷:可以通过“服务管理器” (services.msc) 管理启动、停止和配置。
  • 适用场景:
    • 日志记录
    • 数据备份
    • 系统监控
    • 自动化任务处理

2. Windows 服务的运行机制

Windows 服务通过 Windows 服务控制管理器 (Service Control Manager, SCM) 进行管理。SCM 提供以下功能:

  • 启动、停止、暂停服务。
  • 管理服务生命周期。
  • 注册服务运行状态。

Windows 服务的核心方法包括:

  • OnStart:服务启动时执行。
  • OnStop:服务停止时执行。
  • OnPause 和 OnContinue(可选):服务暂停与继续运行时的处理。
  • OnShutdown:系统关闭时执行的清理逻辑。

3. 使用 C# 开发 Windows 服务

3.1 创建 Windows 服务项目

新建项目:

  • 打开 Visual Studio,选择 文件 > 新建 > 项目。
  • 选择 Windows 服务 (.NET Framework) 模板。
  • 如果未找到模板,可选择 控制台应用程序 并手动转为服务。

项目结构:

  • 默认生成一个继承自 ServiceBase 的类,常为 Service1.cs。

3.2 实现服务逻辑

Service 类基础结构:

using NLog;  // 引入 NLog 命名空间,用于日志记录
using System;
using System.ServiceProcess;  // 引入 Windows 服务的相关命名空间
using System.Threading;  // 引入线程管理相关命名空间namespace TestService
{// 定义 TestService 类,继承自 ServiceBase,表示一个 Windows 服务public partial class TestService : ServiceBase{// 构造函数,用于初始化服务public TestService(){InitializeComponent();  // 调用自动生成的初始化组件方法}// 创建一个静态日志记录器实例,用于在服务中记录日志private static readonly Logger Log = LogManager.GetCurrentClassLogger();// 定义一个线程变量,用于执行后台扫描操作private Thread ScanThread;// OnStart 方法在服务启动时被调用protected override void OnStart(string[] args){// 服务启动时记录日志Log.Debug("开始执行");// 初始化扫描线程,指定线程的执行方法为 DoScanScanThread = new Thread(new ThreadStart(DoScan));// 启动线程ScanThread.Start();}// 执行扫描操作的方法private void DoScan(){int n = 0;  // 定义一个计数器,用于记录服务运行的次数// 使用一个无限循环来模拟后台任务的持续执行while (true){try{// 每次循环记录服务的运行次数Log.Debug("这是服务的第 [" + n.ToString() + "] 次运行。");// 模拟服务运行时的等待,假设这里是一个长时间运行的操作Thread.Sleep(10000);  // 每次循环后暂停10秒(10000毫秒)}catch (Exception ex)  // 捕获异常并记录{// 如果发生异常,记录错误日志Log.Error("出现了错误:" + ex);}// 每次循环完成后,再次暂停10秒Thread.Sleep(10000);// 递增计数器n += 1;}}// OnStop 方法在服务停止时被调用protected override void OnStop(){// 如果 ScanThread 存在,表示线程仍在运行if (ScanThread != null){// 停止线程(不推荐使用Abort,后面有改进方式)ScanThread.Abort();// 清空线程引用ScanThread = null;}}}
}

3.3 安装NLog日志记录程序包

在这里插入图片描述

3.4 App.Config 配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration><configSections><section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/></configSections><nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><targets><target name="file" xsi:type="File" fileName="${basedir}/Logs/${date:format=yyyy-MM-dd}/${date:format=yyyy-MM-dd}.txt" layout="[${date:format=yyyy-MM-dd HH\:mm\:ss}][${level}] ${message} ${exception}"/></targets><rules><logger name="*" minlevel="Debug" writeTo="file"/></rules></nlog><startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup>
</configuration>

4 .服务安装配置

1、Service1.cs 右键,添加安装程序

2、相关配置如下

在这里插入图片描述
在这里插入图片描述

5. 安装和启动服务

安装服务

使用命令行工具:
打开 命令提示符(管理员模式),并使用 sc 命令来安装和启动服务。

sc create MyService binPath= "C:\Path\To\Your\Service.exe"
sc start MyService

在这里插入图片描述
在这里插入图片描述

停止服务

你可以通过以下命令停止服务:

命令行:

sc stop MyService

卸载服务

要卸载服务,可以使用以下命令:

命令行:

sc delete MyService

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com