当前位置:首页 > C# > 正文

C# Windows服务开发入门(手把手教你创建与安装Windows服务)

在企业级应用或系统后台任务中,C# Windows服务开发是一种常见且强大的技术。Windows服务可以在操作系统启动时自动运行,无需用户登录,非常适合执行长期运行的后台任务,如日志监控、数据同步、定时任务等。

本教程将带你从零开始,详细讲解如何使用C#语言创建Windows服务并成功将其安装到Windows系统中。即使你是编程小白,也能轻松上手!

一、什么是Windows服务?

Windows服务是在后台运行的可执行程序,它们不依赖于用户界面,通常由系统启动和管理。你可以通过“服务”管理控制台(services.msc)查看和控制它们。

C# Windows服务开发入门(手把手教你创建与安装Windows服务) Windows服务开发  创建Windows服务教程 安装Windows服务 C#后台服务编程 第1张

二、准备工作

你需要以下工具:

  • Visual Studio(推荐2019或更高版本)
  • .NET Framework 4.7.2 或 .NET 6+(本文以.NET Framework为例)
  • 管理员权限(用于安装服务)

三、创建Windows服务项目

  1. 打开 Visual Studio,点击“创建新项目”。
  2. 搜索并选择“Windows 服务 (.NET Framework)”,点击“下一步”。
  3. 输入项目名称,例如 MyFirstWindowsService,选择保存位置,点击“创建”。

创建完成后,你会看到一个名为 Service1.cs 的文件,它继承自 ServiceBase 类。

四、编写服务逻辑

双击 Service1.cs,进入代码视图。我们需要重写 OnStartOnStop 方法。

using System;using System.IO;using System.ServiceProcess;using System.Timers;namespace MyFirstWindowsService{    public partial class Service1 : ServiceBase    {        private Timer timer;        public Service1()        {            InitializeComponent();            this.ServiceName = "MyFirstWindowsService";        }        protected override void OnStart(string[] args)        {            // 服务启动时执行            WriteToFile("服务已启动:" + DateTime.Now);            // 创建一个定时器,每10秒执行一次            timer = new Timer(10000);            timer.Elapsed += new ElapsedEventHandler(OnTimer);            timer.Start();        }        protected override void OnStop()        {            // 服务停止时执行            WriteToFile("服务已停止:" + DateTime.Now);            timer.Stop();        }        private void OnTimer(object sender, ElapsedEventArgs e)        {            WriteToFile("服务正在运行:" + DateTime.Now);        }        private void WriteToFile(string message)        {            string path = @"C:\Logs\MyServiceLog.txt";            try            {                if (!Directory.Exists(Path.GetDirectoryName(path)))                {                    Directory.CreateDirectory(Path.GetDirectoryName(path));                }                File.AppendAllText(path, message + Environment.NewLine);            }            catch (Exception ex)            {                File.AppendAllText(@"C:\Logs\ErrorLog.txt",                     "写入日志失败:" + ex.Message + Environment.NewLine);            }        }    }}

上面的代码会在服务启动后,每10秒向 C:\Logs\MyServiceLog.txt 写入一条日志。

五、添加安装程序

为了让系统能识别并安装你的服务,需要添加一个安装程序。

  1. Service1.cs 设计视图中,右键空白处,选择“添加安装程序”。
  2. 会自动生成 ProjectInstaller.cs 文件。
  3. 双击打开,在设计界面中你会看到两个组件:serviceInstaller1serviceProcessInstaller1

设置属性如下:

  • serviceInstaller1:
    • ServiceName: MyFirstWindowsService
    • DisplayName: 我的第一个Windows服务
    • Description: 这是一个演示用的C# Windows服务
    • StartType: Automatic(自动启动)
  • serviceProcessInstaller1:
    • Account: LocalSystem

六、编译项目

点击“生成” → “生成解决方案”。确保没有错误。编译后的可执行文件通常位于 bin\Debugbin\Release 文件夹中。

七、安装Windows服务

Windows提供了 InstallUtil.exe 工具来安装服务。操作步骤如下:

  1. 管理员身份打开命令提示符(CMD)或 PowerShell。
  2. 导航到 .NET Framework 的安装目录(通常为):
cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
  1. 执行安装命令(替换为你自己的exe路径):
InstallUtil.exe "C:\YourProjectPath\MyFirstWindowsService\bin\Debug\MyFirstWindowsService.exe"

如果看到“Commit阶段已成功完成”,说明安装成功!

八、启动和测试服务

  1. Win + R,输入 services.msc,回车。
  2. 在服务列表中找到“我的第一个Windows服务”。
  3. 右键 → “启动”。
  4. 等待几秒后,检查 C:\Logs\MyServiceLog.txt 是否有内容写入。

九、卸载服务(可选)

如果需要卸载服务,同样使用 InstallUtil.exe,加上 /u 参数:

InstallUtil.exe /u "C:\YourProjectPath\MyFirstWindowsService\bin\Debug\MyFirstWindowsService.exe"

十、总结

通过本教程,你已经掌握了如何使用C#进行Windows服务开发,包括创建、编写逻辑、添加安装程序、编译、安装与测试。这项技能在创建Windows服务教程中属于核心内容,也是C#后台服务编程的重要组成部分。

记住:服务运行在系统上下文中,务必处理好异常和日志,避免服务崩溃。同时,确保你的服务有足够的权限访问所需资源。

现在,你已经可以自信地开发自己的Windows后台服务了!