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

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

Windows
瑟维斯那壹块并不复杂,不过注意事项太多了,网上资料也很凌乱,偶尔自身写也会丢叁落四的。所以本文也就发生了,本文不会写复杂的东西,完全以基础运用的供给来写,所以不会对Windows
Service写很尖锐。

正文介绍了怎么着用C#创办、安装、运营、监察和控制、卸载简单的Windows Service的始末步骤和注意事项。

一、创制一个Windows Service

1)创建Windows Service项目

C# 1C# 2

2)对Service重命名

将Service一重命名称叫你服务名称,那里大家命名称为ServiceTest。

2、创造服务安装程序

一)增多安装程序

C# 3

C# 4

后来我们能够看到上图,自动为大家创设了ProjectInstaller.cs以及三个安装的零件。

二)修改安装服务名

右键serviceInsraller一,采取属性,将ServiceName的值改为ServiceTest。

C# 5

三)修改安装权限

右键serviceProcessInsraller一,采用属性,将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.");
            }
        }
    }
}

此间大家的逻辑不会细小略,运维服务的时候写个日志,关闭的时候再写个日志。

肆、创立安装脚本

在项目中增添一个公文如下(必须是ANSI只怕UTF-八无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

二)卸载脚本Uninstall.bat

?

1
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsServiceTest.exe

三)安装脚本表明

第3行事运维服务。

其三行为设置服务为全自动运转。

那二行视服务格局活动选取。

4)脚本调节和测试

借使急需查阅脚本运营处境,在剧本最终一行插足pause

五、在C#中对服务开始展览支配

0)配置目录结构

简历一个新WPF项目,叫Windows瑟维斯TestUI,加多对System.ServiceProcess的引用。

在WindowsServiceTestUI的bin\Debug目录下树立Service目录。

将WindowsServiceTest的扭转目录设置为地点创建的Service目录。

变动后目录结构如下图

C# 7

 

1)安装

安装时会发生目录难点,所以安装代码如下:

?

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();
}

六)检查情形

?

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

六、调试Windows Service

壹)安装并运维服务

2)附加进度

C# 8C# 9

三)在代码中参预断点进行调控

C# 10

七、总结

本文对Windows
service的上述配置都未做详细表明,不过按上述手续就能够创建可运维的Windows
Service,从而达成了办事的急需。

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

相关文章