博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#编写Windows服务程序图文教程
阅读量:4679 次
发布时间:2019-06-09

本文共 4141 字,大约阅读时间需要 13 分钟。

Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的。所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Windows Service写很深入。

本文介绍了如何用C#创建、安装、启动、监控、卸载简单的Windows Service 的内容步骤和注意事项。

一、创建一个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.exeNet Start ServiceTestsc 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,从而达到了工作的需求。

 

 

 

要创建一个新的 Windows 服务,可以从Visual C# 工程中选取 Windows 服务(Windows Service)选项,给工程一个新文件名,然后点击确定

你可以看到,向导向工程文件中增加WebService1.cs类:

其中各属性的含意是:

ü         Autolog                 是否自动写入系统的日志文件

ü         CanHandlePowerEvent     服务时候接受电源事件

ü         CanPauseAndContinue          服务是否接受暂停或继续运行的请求

ü         CanShutdown 服务是否在运行它的计算机关闭时收到通知,以便能够调用 OnShutDown 过程

ü         CanStop                              服务是否接受停止运行的请求

ü         ServiceName                       服务名

 

 

 

 

3:若要确定如何启动服务,请单击 ServiceInstaller 组件并将StartType 属性设置为适当的值。

 

ü         Manual     服务安装后,必须手动启动。

 

ü         Automatic   每次计算机重新启动时,服务都会自动启动。

 

ü         Disabled    服务无法启动。

 

4:将serviceProcessInstaller类的Account属性改为 LocalSystem

 

    这样,不论是以哪个用户登录的系统,服务总会启动。

 

转载于:https://www.cnblogs.com/wujy/archive/2013/01/14/2860345.html

你可能感兴趣的文章
设计模式java 模板模式_java设计模式--模板方法模式
查看>>
中缀转后缀 java_Java 利用堆栈将中缀表达式转换成后缀
查看>>
java执行sql解析_java执行SQL语句实现查询的通用方法详解
查看>>
java中keepalived开启方式_高可用之KeepAlived(一):基本概念和配置文件分析
查看>>
java中的ejb_JAVA语言中关于EJB技术概论
查看>>
java有date类型吗_关于java中date类型的问题
查看>>
java中svg图片怎么用_svg如何使用
查看>>
java dart 官司_From Java to Dart
查看>>
java ftp 读取excel_从Excel文件读取数据表
查看>>
oracle 有哪些字典表,oracle 常用字典表
查看>>
linux c多进程多线程,linux下的C\C++多进程多线程编程简易例子
查看>>
linux 命令 考试,linux常用命令总结-第一次考试
查看>>
linux动态库编译多重依赖,Linux动态库多重依赖
查看>>
linux网卡缓冲区设置,【Linux】tcp缓冲区大小的默认值、最大值
查看>>
opus编译linux,Linux 下源码编译FFMEG
查看>>
linux 运行real basic,REALbasic 快速入门.pdf
查看>>
linux启动tomcat不停的触发gc,tomcat启动时就频繁gc和full gc
查看>>
linux uart串口驱动,X-017-KERNEL-串口驱动开发之uart driver框架
查看>>
linux 添加串口数量,如何在Linux中添加4个以上的串口设备?
查看>>
SCUT - 482 - 生成树上的点 - Prufer
查看>>