起因

在平时部署Windows Service时,通过命令行部署服务太费劲了,总想着有没有想桌面程序那样的方式,点个按钮就能完成所有操作的了。此想法由来已久,只是事情比较多,最近总算有时间了,在此想法的驱使下,最终有了这篇文章的诞生。

解决方案

一、开发环境

操作系统:Windows 10 X64
开发环境:VS2013
编程语言:C#
.NET版本:.NET Framework 4.0
目标平台:X86

二、创建Windows Service

1、新建一个Windows Service,并将项目名称改为“WindowsServiceDemo”,如下图所示:

img

2、重命名服务文件Service1.cs为ServideDemo.cs,弹出“重命名选择”提示框选择“是”。

img

3、选中服务文件ServiceDemo.cs,点击“查看代码”按钮,跳转至编辑代码页面。

img

4、在代码编辑也,编辑服务代码如下:

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
36
37
38
39
40
41
42
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;

namespace WindowsServiceDemo
{
public partial class ServiceDemo : ServiceBase
{
public ServiceDemo()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
// TODO:在此处添加代码以启动服务。
ServiceLog(@"E:\ServiceDemoLog.txt", String.Format("{0},服务启动!", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
}

protected override void OnStop()
{
// TODO:在此处添加代码以执行停止服务所需的关闭操作。
ServiceLog(@"E:\ServiceDemoLog.txt", String.Format("{0},服务停止!", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
}

private void ServiceLog(String path, String Context)
{
using (FileStream stream = new FileStream(path, FileMode.Append))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine(Context);
}
}
}
}

5、右键单击ServiceDemo.cs,单击“查看设计器”。在设计器上右键单击,点击“添加安装程序”。

img

6、程序安装文件ProjectInstaller.cs,包含一个“serviceProcessInstaller”和“serviceInstaller”组件。

img

7、serviceInstaller组件右键单击,选择“属性”。修改“ServiceName”为“ServiceDemo”,修改“Description”为“服务例子”;修改“StartType”为“Manual”。

img

8、serviceProcessInstaller组件单击,选择“属性”。修改“Account”为“LocalSystem”。

img

9、右键单击WindowsServiceDemo项目文件,选择“生成”。服务创建成功。

img

三、创建Service控制窗体程序

1、新建一个名为WindowsServiceDemoClient的Windows窗体程序。

img

2、设计窗体功能组件,如下图:

img

3、引入命名空间“System.ServiceProcess”和“System.Configuration.Install”,点击不同按钮实现按钮功能,代码如下

![img](./有图形用户界面的Windows Service.assets/ContractedBlock.gif) View Code

4、为了在Windows窗体程序中安装、卸载Windows服务,需要在Windows窗体程序中引入已经生成的WindowsServiceDemo服务。

img

5、安装Windows服务需要UAC中Administrator的权限,右键WindowsServiceDemoClient“添加”-“新建项”,添加“应用程序清单文件”,app.manifest文件。

img

6、修改为

img

7、右键单击WindowsServiceDemoClient项目文件,选择“生成”。操作服务客户端创建成功。

四、运行Service控制窗体程序

1、右键“WindowsServiceDemoClient”窗体程序“在文件资源管理器中打开文件夹”。

img

2、在“bin”-“Debug”中找到WindowsServiceDemoClient.exe双击打开。

img

3、在“开始”-“Windows系统”-“运行”,输入“services.msc”打开服务列表。

img

4、点击“安装服务”,服务安装成功,手动刷新服务列表,ServiceDemo显示出来。

img

5、点击“启动服务”,服务启动成功,手动刷新服务列表,ServiceDemo状态显示“正在运行”。

img

6、点击“停止服务”,服务停止成功,手动刷新服务列表,ServiceDemo状态置空了。

img

7、点击“卸载服务”,服务卸载成功,手动刷新服务列表,ServiceDemo不存在了。

img

8、以下为服务启动和停止时写入“E:\ServiceDemoLog.txt”中的日志信息。

img

总结

到此文章完成,也算了了一个小小的心愿,O(∩_∩)O哈哈~
以后继续加油吧,写更好的文章。拜拜~