手把手教会你什么通过C#创建Windows Service

正文转载:http://www.cnblogs.com/xiurui12345/archive/2012/05/16/2503868.html

Windows
Service这同样块并无复杂,但是注意事项太多了,网上资料啊坏糊涂,偶尔自己写啊会见弃三取四底。所以本文也就发生了,本文不见面刻画复杂的物,完全以基础运用的要求来形容,所以不会见针对Windows
Service写死深切。

本文介绍了什么样用C#创建、安装、启动、监控、卸载简单的Windows Service
的始末步骤及注意事项。

一样、创建一个Windows Service

1)创建Windows Service项目

C# 1C# 2

2)对Service重命名

拿Service1重命名为卿服务号,这里我们命名也ServiceTest。

第二、创建服务安装程序

1)添加安装程序

C# 3

C# 4

从此我们好看看上图,自动为咱创建了ProjectInstaller.cs以及2单装的机件。

2)修改安装服务名

右键serviceInsraller1,选择属性,将ServiceName的价改也ServiceTest。

C# 5

3)修改安装权限

右键serviceProcessInsraller1,选择属性,将Account的价改吧LocalSystem。

C# 6

老三、写副服务代码

1)打开ServiceTest代码

右键ServiceTest,选择查看代码。

2)写入Service逻辑

增长如下代码:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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

?

1
2
3
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowsServiceTest.exe
Net Start ServiceTest
sc config ServiceTest start= auto

2)卸载脚本Uninstall.bat

?

1
%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目录。

变更后目录结构使下图

C# 7

 

1)安装

安装时会见出C#目录问题,所以安装代码如下:

?

1
2
3
4
5
6
7
8
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)卸载

卸载时也会产生目录问题,所以卸载代码如下:

?

1
2
3
4
5
6
7
8
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)启动

代码如下:

?

1
2
3
4
5
using System.ServiceProcess;
 
 
ServiceController serviceController = new ServiceController("ServiceTest");
serviceController.Start();

4)停止

?

1
2
3
ServiceController serviceController = new ServiceController("ServiceTest");
if (serviceController.CanStop)
    serviceController.Stop();

5)暂停/继续

?

1
2
3
4
5
6
7
8
ServiceController serviceController = new ServiceController("ServiceTest");
if (serviceController.CanPauseAndContinue)
{
    if (serviceController.Status == ServiceControllerStatus.Running)
        serviceController.Pause();
    else if (serviceController.Status == ServiceControllerStatus.Paused)
        serviceController.Continue();
}

6)检查状态

?

1
2
ServiceController serviceController = new ServiceController("ServiceTest");
string Status = serviceController.Status.ToString();

六、调试Windows Service

1)安装并运行服务

2)附加进程

C# 8C# 9

3)在代码中入断点进行调试

C# 10

七、总结

本文对Windows
service的上述配置都非开详细说明,但是本上述手续就是可打而运行的Windows
Service,从而达到了办事的需。

演示代码请见:https://github.com/sorex/WindowsServiceTest

相关文章