C#开发Windows服务完整指南:创建、安装与卸载

七月
七月
发布时间:2026-10-14| 4人浏览过
原创

Windows服务(原NT服务)允许创建长时间运行的可执行应用程序,支持开机自启、暂停重启且无界面干扰,非常适合服务器端后台任务。本文将演示如何利用C#和Visual Studio创建一个将系统时间写入文件的简单服务,并详细说明如何通过安装组件配置和批处理脚本完成服务的正式部署。

新建Windows服务项目

在Visual Studio中,选择“新建项目”,模板类别定位到“Windows桌面”或对应版本的“Windows服务”项,即可生成基础的服务工程框架。

默认生成的项目中通常包含一个 Services1.cs 类。建议将其删除,重新添加一个新的Windows服务项目文件,以便清晰命名和管理业务逻辑。

核心逻辑实现

进入新服务类的视图代码(View Code),可以看到两个关键的重写方法:OnStart 用于处理服务启动时的初始化工作,OnStop 用于服务停止时的清理工作。以下代码展示了如何在服务生命周期内记录日志:

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

namespace MyFirstWindowsService
{
    partial class MyWindowsService : ServiceBase
    {
        public MyWindowsService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            // TODO: Add code here to start your service.
            // 打开D盘文件用于追加内容
            FileStream fileStream = new FileStream(@"D:\MyWindowsService.txt", FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter streamWriter = new StreamWriter(fileStream);
            
            // 移动流指针到末尾,确保不覆盖原有数据
            streamWriter.BaseStream.Seek(0, SeekOrigin.End);
            
            // 写入启动时间与标识
            streamWriter.WriteLine("My service started " + DateTime.Now.ToString() + "\n");
            streamWriter.Flush();
            streamWriter.Close();
            fileStream.Close();
        }

        protected override void OnStop()
        {
            // TODO: Add code here to perform any tear-down necessary to stop your service.
            FileStream fileStream = new FileStream(@"D:\MyWindowsService.txt", FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter streamWriter = new StreamWriter(fileStream);
            
            streamWriter.BaseStream.Seek(0, SeekOrigin.End);
            streamWriter.WriteLine("My service stopped " + DateTime.Now.ToString() + "\n");
            
            streamWriter.Flush();
            streamWriter.Close();
            fileStream.Close();
        }
    }
}

配置安装程序组件

为了让Windows能够识别并管理此服务,必须添加安装组件。右键点击 MyWindowsService.cs 文件,选择“查看设计器”(View Designer),然后在设计界面空白处右键,选择“添加安装程序”(Add Installer)。

这将在项目中生成 MyWindowsServiceProjectInstaller.cs 文件,其中包含两个核心组件:serviceProcessInstaller1 和 serviceInstaller1。为确保服务能在标准账户下运行(无需管理员特权启动所有服务),需要将 serviceProcessInstaller1 的 Account 属性修改为 LocalService。

此外,检查 serviceInstaller1 的配置:设置 DisplayName 为易读的服务名称(如“ServiceTest”),并确保 StartType 可根据需求设置为“自动”或“手动”。

批处理脚本部署

完成编译后,可以使用 .NET Framework 自带的 installutil.exe 工具进行命令行安装。以下是针对该服务的安装与卸载脚本示例(请根据实际编译输出路径调整文件位置):

安装服务批处理

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe C:\Users\gaoja1\Desktop\MyWindowsService\MyFirstWindowsService\bin\Debug\MyFirstWindowsService.exe
Net Start ServiceTest
sc config ServiceTest start= auto

卸载服务批处理

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u C:\Users\gaoja1\Desktop\MyWindowsService\MyFirstWindowsService\bin\Debug\MyFirstWindowsService.exe

成功执行安装脚本后,在Windows服务列表中即可看到新注册的服务。

启动该服务后,前往D盘目录,可以观察到一个名为 MyWindowsService.txt 的文件,其中记录了服务首次启动的具体时间,证明服务已成功运行。

以上就是C#开发Windows服务及部署的详细内容,更多关于本地部署与服务管理的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。