windows 服务程序

Post on 16-Jan-2016

122 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Windows 服务程序. 大连现代高技术发展有限公司 数字医疗事业部医疗软件部 刘兴. 主要内容. 1.Windows 服务程序介绍 2. 使用 VC++ 开发 Windows 服务程序. 一、 Windows 服务程序介绍. 在 2000/XP 等基于 NT 的操作系统中,有一个 服务控制管理器 SCM ( Service Control Manager) ,它管理的后台进程被称为服务( Service ) 。 - PowerPoint PPT Presentation

TRANSCRIPT

Windows 服务程序

大连现代高技术发展有限公司数字医疗事业部医疗软件部

刘兴

主要内容1.Windows 服务程序介绍2. 使用 VC++ 开发 Windows 服务程序

一、 Windows 服务程序介绍 在 2000/XP 等基于 NT 的操作系统中,有一个服务控制管理器 SCM ( Service Control Manager) ,它管理的后台进程被称为服务( Service) 。 服务是一种应用程序类型,它在后台悄悄运行。我们通过将自己的程序登记为服务,可以使自己的程序不出现在任务管理器中,并且随系统启动而最先运行,随系统关闭而最后停止。

有人可能会说写一个没有界面的普通应用程序,再在 Windows 的启动菜单上加上它,不是一样可以吗?但是放在启动菜单上的普通应用程序在 Windows 没有登录前是永远也不会执行的。而服务程序会在登录系统时自动运行,甚至在没有用户登录系统的情况下也会正常执行。

服务程序大多是控制台程序,不过也有少数的 GUI 程序。服务应用程序通常可以在本地和通过网络为用户提供一些功能,例如

客户端 / 服务器应用程序、 Web 服务器、数据库服务器以及其他基于服务器的应用程序。 服务有两种不同的形式。驱动器服务使用驱动器协议,让 NT 可以与特定的硬件进行通信。另一个是 Win32 服务,通过一般的 Win32 API 来实现后台任务。

每个 Windows NT/2000 系统都有一个SCM , SCM 存在于 Service.exe 中,在Windows 启动的时候会自动运行,伴随着

操作系统的启动和关闭而产生和终止。这个进程以系统特权运行,并且提供一个统一的、安全的手段去控制服务。它其实是一个 RPC Server 。 SCM 包含一个储存着已安装的服务和驱动程序的信息的数据库,通过 SCM 可以统一的、安全的管理这些信息,因此一个服务程序的安装过程就是将自身的信息写入这个数据库。

二、使用 VC++/MFC 开发 Windows 服务程序

2.1 用 ATL 工程 编写服务程序 1. 步骤 首先,我们新建一个 Project 。如下图所示:

选择 “ ATL COMAppWizard” ,工程名为:ServiceDemo 。点击 “ OK ” 进入一下步。

选择 Service [EXE] 。点击 Finish 。

2. 运行机制

入口函数 : _tWinMain()( 全局 )

初始化函数 : Init()

服务开始运行时函数 :Run()

3.需要注意的问题 1)如果你想在“控制面板 -> 管理工具 ->服务”里看到自己的服务程序,请在 VC 工程的 Project->Setting->Debug->Program arguments里加上 -RegServer或 -Service 运行参数。其中 -RegServer 是本地服务器注册,-Service 是服务注册。如果想删除此服务程序,把参数设置 -UnregServer 。

2)如果你想使用 MFC 的类,请在工程文件 StdAfx.h文件的 #include <atlbase.h> 前面加上 #include<afxwin.h> 一行,以包括MFC头文件。

3)如果你想使用部门自己的类库,请在 #include<afxwin.h> 下加上自己的诸如MCMN.h头文件 (只是一个建议,可以在需要的地方包含相关头文件) 。如果出现编译错误,请在部门自己的类库前面包含诸如 #include <afxcmn.h> 、 #include <afxext.h>头文件。

4)如果你想使用部门自己的类库,请在“ Project->Setting->General” 的“ Microsoft

Foundation Classes” 选项中选择“ Use MFC

in a Shared DLL”项以去掉一些警告( MSDN

说这些警告是正常的)。

2.2 使用 API 自己动手写 Windows 服务程序

原因 :由于建基于 ATL 的工程很难显 示 MFC 的界面 ( 个人这么认为 ) 。

1. 过程

先创建一个普通的 MFC 工程(试过基于对话框工程),然后使用 API创建服务程序。

2.API 介绍(参数省略)1)OpenSCManager ()打开 SCM 服务

器2) CreateService ()创建服务程序3)OpenService ()打开服务程序4) DeleteService ()删除服务程序5) SetServiceStatus ()设置服务程序属 性6)QueryServiceStatus ()查询服务程序

属性

7) ControlService ()设置服务程序的状态8) CloseServiceHandle ()关闭由Open

SCManager ()、 CreateService () 、

OpenService ()三个函数产生的句柄9) RegisterServiceCtrlHandler ()注册 SCM 服务器消息的处理函数10) StartServiceCtrlDispatcher ()分配服 务程序消息

3. 使用 API

1)创建服务程序 使用 OpenSCManager ()打开 SCM ,

使用 CreateService ()创建服务程序, 使用 CloseServiceHandle ()关闭服务程

序的句柄。

2)删除服务程序 使用 OpenSCManager ()打开 SCM ,

使用 OpenService ()打开服务程序,使用 ControlService ()设置服务程序的状态为停止。使用 QueryServiceStatus查询服务程序的当前状态,如果当前状态为停止,调用 DeleteService ()删除服务程序。调用 CloseServiceHandle ()关闭 OpenSCMan

ager ()、 OpenService () 产生的句柄。

3)分配消息 创建完服务程序后调用 StartServiceCtrl

Dispatcher () 分配消息处理, Windows

回调 RegisterServiceCtrlHandler ()为服务程序注册 SCP (Service ControlDispatcher)消息处理函数。 SCP允许用户开始、停止、暂停、继续,并且控制一个或多个安装在计算机上服务的 Win32 应用程序,SCP 的作用是与 SCM 通讯, Windows 2000管理工具中的“服务”就是一个典型的 SCP 。

4)调试服务程序 为了方便调试,我们可以先写好调试、安装、删除等函数,根据 VC++ 的命令行参数来执行如调试、安装、删除等操作。

top related