C#编写Windows服务程序详细步骤详解(图文)
发布时间 - 2026-01-11 03:26:36 点击率:次一、创建一个Windows Service

1)创建Windows Service项目
2)对Service重命名
将Service1重命名为你服务名称,这里我们命名为ServiceTest。
二、创建服务安装程序
1)添加安装程序
之后我们可以看到上图,自动为我们创建了ProjectInstaller.cs以及2个安装的组件。
2)修改安装服务名
右键serviceInsraller1,选择属性,将ServiceName的值改为ServiceTest。
3)修改安装权限
右键serviceProcessInsraller1,选择属性,将Account的值改为LocalSystem。
三、写入服务代码
1)打开ServiceTest代码
右键ServiceTest,选择查看代码。
2)写入Service逻辑
添加如下代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
namespace WindowsServiceTest
{
public partial class ServiceTest : ServiceBase
{
public ServiceTest()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true))
{
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Start.");
}
}
protected override void OnStop()
{
using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true))
{
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Stop.");
}
}
}
}
这里我们的逻辑很简单,启动服务的时候写个日志,关闭的时候再写个日志。
四、创建安装脚本
在项目中添加2个文件如下(必须是ANSI或者UTF-8无BOM格式):
1)安装脚本Install.bat
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowsServiceTest.exe
Net Start ServiceTest
sc config ServiceTest start= auto
2)卸载脚本Uninstall.bat
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsServiceTest.exe
3)安装脚本说明
第二行为启动服务。
第三行为设置服务为自动运行。
这2行视服务形式自行选择。
4)脚本调试
如果需要查看脚本运行状况,在脚本最后一行加入pause
五、在C#中对服务进行控制
0)配置目录结构
简历一个新WPF项目,叫WindowsServiceTestUI,添加对System.ServiceProcess的引用。
在WindowsServiceTestUI的bin\Debug目录下建立Service目录。
将WindowsServiceTest的生成目录设置为上面创建的Service目录。
生成后目录结构如下图
1)安装
安装时会产生目录问题,所以安装代码如下:
string CurrentDirectory = System.Environment.CurrentDirectory; System.Environment.CurrentDirectory = CurrentDirectory + "\\Service"; Process process = new Process(); process.StartInfo.UseShellExecute = false; process.StartInfo.FileName = "Install.bat"; process.StartInfo.CreateNoWindow = true; process.Start(); System.Environment.CurrentDirectory = CurrentDirectory;
2)卸载
卸载时也会产生目录问题,所以卸载代码如下:
string CurrentDirectory = System.Environment.CurrentDirectory; System.Environment.CurrentDirectory = CurrentDirectory + "\\Service"; Process process = new Process(); process.StartInfo.UseShellExecute = false; process.StartInfo.FileName = "Uninstall.bat"; process.StartInfo.CreateNoWindow = true; process.Start(); System.Environment.CurrentDirectory = CurrentDirectory;
3)启动
代码如下:
using System.ServiceProcess;
ServiceController serviceController = new ServiceController("ServiceTest");
serviceController.Start();
4)停止
ServiceController serviceController = new ServiceController("ServiceTest");
if (serviceController.CanStop)
serviceController.Stop();
5)暂停/继续
ServiceController serviceController = new ServiceController("ServiceTest");
if (serviceController.CanPauseAndContinue){
if (serviceController.Status == ServiceControllerStatus.Running)
serviceController.Pause();
else if (serviceController.Status == ServiceControllerStatus.Paused)
serviceController.Continue();
}
6)检查状态
ServiceController serviceController = new ServiceController("ServiceTest");
string Status = serviceController.Status.ToString();
六、调试Windows Service
1)安装并运行服务
2)附加进程
3)在代码中加入断点进行调试
七、总结
本文对Windows service的上述配置都未做详细解释,但是按上述步骤就可以制作可运行的Windows Service,从而达到了工作的需求。
# C#
# Windows服务
# C#启动windows服务方法的相关问题分析
# C#启动和停止windows服务的实例代码
# C#编写Windows服务实例代码
# c#创建windows服务(Windows Services)详细步骤
# c#创建windows服务入门教程实例
# C#使用windows服务开启应用程序的方法
# C#创建Windows服务的实现方法
# C#创建Windows服务与服务的安装、卸载
# C#创建Windows Service(Windows 服务)的方法步骤
# 右键
# 安装程序
# 重命名
# 也会
# 达到了
# 很简单
# 可以看到
# 设置为
# 中对
# 命名为
# 创建一个
# 如下图
# 就可以
# 上图
# 自动运行
# 再写
# 未做
# 按上
# 为你服务
# 目录下
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JS中对数组元素进行增删改移的方法总结
高防服务器租用指南:配置选择与快速部署攻略
Laravel如何生成URL和重定向?(路由助手函数)
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
利用JavaScript实现拖拽改变元素大小
Laravel如何集成Inertia.js与Vue/React?(安装配置)
如何在服务器上三步完成建站并提升流量?
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
网站页面设计需要考虑到这些问题
如何在建站之星网店版论坛获取技术支持?
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
制作电商网页,电商供应链怎么做?
如何快速建站并高效导出源代码?
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
如何快速生成可下载的建站源码工具?
详解vue.js组件化开发实践
javascript中的try catch异常捕获机制用法分析
详解jQuery中基本的动画方法
JavaScript如何实现类型判断_typeof和instanceof有什么区别
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
教你用AI润色文章,让你的文字表达更专业
网站制作软件有哪些,制图软件有哪些?
历史网站制作软件,华为如何找回被删除的网站?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
音乐网站服务器如何优化API响应速度?
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
Laravel Fortify是什么,和Jetstream有什么关系
JavaScript实现Fly Bird小游戏
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
微信小程序 五星评分(包括半颗星评分)实例代码
Laravel如何使用Livewire构建动态组件?(入门代码)
简历在线制作网站免费版,如何创建个人简历?
如何在局域网内绑定自建网站域名?
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
活动邀请函制作网站有哪些,活动邀请函文案?
如何基于云服务器快速搭建个人网站?
音响网站制作视频教程,隆霸音响官方网站?
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
如何快速选择适合个人网站的云服务器配置?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
如何用AI帮你把自己的生活经历写成一个有趣的故事?
🚀拖拽式CMS建站能否实现高效与个性化并存?
googleplay官方入口在哪里_Google Play官方商店快速入口指南

