2024年3月21日发(作者:)

创建Windows服务

Windows服务,在Windows XP以前称为NT服务,是一种以后台无人值守方式,且运

行在特定安全上下文中的系统程序,通常将之称为服务例程。Windows服务程序与一般应用

程序不同,它具有以下特征:

1、Windows服务程序通常无需与用户进行交互,是一种控制台应用程序。

2、Windows服务程序为系统中其它进程提供服务,而不是针对用户提供服务。

3、Windows服务程序是运行在特定安全上下文中的系统进程,其执行状态由系统控制。

4、Windows服务程序需安装注册到系统才能加载和执行,并可随系统启动而加载。

.NET Framework在eProcess名空间提供创建Windows服务应用程序的编

程模型。

一、

Windows

服务

Windows系统为Windows服务的加载、执行和控制提供三个功能组件:服务应用程序

(Service Application)、服务控制程序(Service Control Program,SCP)和服务控制管理器

(Service Configuration Manager,SCM)。

服务应用程序提供功能服务,并向服务控制管理器通报其执行状态。如:Windows系统

中自动更新服务就提供了当有新的系统更新时通知用户并可自动下载、安装、更新系统文件

的功能。

服务控制程序提供控制服务应用程序的功能,如:启动、暂停、停止服务等。

服务控制管理器是服务应用程序与服务控制程序之间的媒介,它提供创建和管理服务的

编程接口,服务控制程序使用服务控制管理器实现控制服务应用程序。服务控制管理器还提

供可视化的用户交互界面。在Windows系统中,可在运行输入窗口键入指令“”或

使用“控制面板-系统工具-服务”打开服务控制管理器的可视化操作界面。

1、服务控制管理器(SCM)

服务控制管理器的可执行文件镜像是“”。在系统引导之

前(即在Winlogo运行之前)将加载该可执行文件镜像,当服务控制管理器运行后,将扫描

注册表中“HKEY_LOCAL_MACHINESystemCurrentControlSetServices”键下的内容。将该键

下的每个子键在内存服务数据库中创建一个服务入口,在服务入口中包含与服务相关的所有

参数和跟踪服务状态的域,若服务被标识为自动启动,服务控制管理器将启动该服务,并侦

测在启动过程中产生的错误。

在“HKEY_LOCAL_MACHINESystemCurrentControlSetServices”键下包含许多子键,每

个子键代表一个Windows服务,子键名表示该服务的内部名称,其下的键值项表示与该服

务相关的参数,一些常用参数所表示的含义见下表。

参数名

DisplayName

注册表字段类型

REG_SZ

说明

用于显示到服务控制管理器中的显示名称

ImagePath

Type

Start

ErrorControl

REG_EXPEND_SZ

REG_DWORD

REG_DWORD

REG_DWORD

表示服务的可执行文件路径和加载参数

表示服务的类型

表示服务的加载方式

表示启动服务出错时,服务控制管理器的行为

从这些参数信息可以看出,要创建Windows服务,需要提供服务的名称、服务类型、

服务加载方式、服务执行文件路径以及启动服务错误处理等方面内容,.NET Framework将

这些参数信息都封装到eBase类中。所谓安装注册服务,实际上

是指在“HKEY_LOCAL_MACHINESystemCurrentControlSetServices”注册表键下创建服务子

键和在内存服务数据库中创建服务入口的过程,而卸载服务则是从内存服务数据库删除服务

入口以及从注册表中删除该子键的操作。

在创建Windows服务之前,必须要确定的是所要创建的服务类型、加载方式、启动服

务错误处理以及运行的安全上下文。

2、服务类型

eType枚举类型用来说明Windows系统所提供的服务类型。

枚举

说明

ServiceType

名空间

eProcess

列举Windows系统提供的Windows服务类型,可按位组合

Windows常量

SERVICE_ADAPTER

(0x00000004)

SERVICE_RECOGNIER_DRIVER

(0x00000008)

SERVICE_KERNERL_DRIVER

(0x00000001)

SERVICE_FILESYSTEM_DRIVER

(0x00000002)

SERVICE_WIN32_OWN_PROCESS

(0x00000010)

说明

用于需要自己驱动支持的硬件

设备驱动

文件系统驱动,用于启动时确

定系统中存在的文件系统

内核设备驱动,用于硬件设备

的驱动程序

文件系统驱动,可用于加载新

的文件系统或进行文件过滤

使用独立进程地址空间运行的

Win32服务

枚举名

Adapter

RecognierDrvicer

KernerlDriver

FileSystemDriver

Win32OwnProcess

SERVICE_WIN32_SHARE_PROCESS

可与其他进程共享地址空间的

Win32ShareProcess

(0x00000020)

Win32服务

InteractiveProcess

SERVICE_INTERACTIVE_PROCESS

(0x00000100)

可与Windows桌面交互的服务

在这些服务类型中,除Adapter和RecognierDriver两种服务类型为系统保留外,.NET