1 / 21

Windows 服务程序

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

rae
Download Presentation

Windows 服务程序

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Windows 服务程序 大连现代高技术发展有限公司 数字医疗事业部医疗软件部 刘兴

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

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

  4. 有人可能会说写一个没有界面的普通应用 程序,再在Windows的启动菜单上加上它, 不是一样可以吗?但是放在启动菜单上的普 通应用程序在Windows没有登录前是永远也 不会执行的。而服务程序会在登录系统时自 动运行,甚至在没有用户登录系统的情况下 也会正常执行。 服务程序大多是控制台程序,不过也有 少数的GUI程序。服务应用程序通常可以在本 地和通过网络为用户提供一些功能,例如

  5. 客户端/服务器应用程序、Web 服务器、数据 库服务器以及其他基于服务器的应用程序。 服务有两种不同的形式。驱动器服务使用 驱动器协议,让NT可以与特定的硬件进行通 信。另一个是Win32服务,通过一般的Win32 API来实现后台任务。 每个Windows NT/2000系统都有一个 SCM,SCM存在于Service.exe中,在 Windows启动的时候会自动运行,伴随着

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

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

  8. 2.1 用 ATL工程 编写服务程序 1.步骤 首先,我们新建一个Project。如下图所示: 选择 “ATL COMAppWizard”,工程名为:ServiceDemo。点击 “OK ”进入一下步。

  9. 选择Service [EXE]。点击 Finish。

  10. 2.运行机制 入口函数: _tWinMain()(全局) 初始化函数: Init() 服务开始运行时函数:Run()

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

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

  13. 4)如果你想使用部门自己的类库,请在“Project->Setting->General”的“Microsoft Foundation Classes”选项中选择“Use MFC in a Shared DLL”项以去掉一些警告(MSDN 说这些警告是正常的)。

  14. 2.2 使用API自己动手写Windows服务程序 原因:由于建基于ATL的工程很难显 示 MFC的界面(个人这么认为)。

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

  16. 2.API介绍(参数省略) • 1)OpenSCManager()打开SCM服务器 • 2)CreateService()创建服务程序 • 3)OpenService()打开服务程序 • 4)DeleteService()删除服务程序 • 5)SetServiceStatus()设置服务程序属 性 • 6)QueryServiceStatus()查询服务程序 属性

  17. 7)ControlService()设置服务程序的状态 • 8)CloseServiceHandle()关闭由Open SCManager()、 CreateService() 、 OpenService()三个函数产生的句柄 • 9)RegisterServiceCtrlHandler()注册 SCM服务器消息的处理函数 • 10)StartServiceCtrlDispatcher()分配服 务程序消息

  18. 3.使用API 1)创建服务程序 使用OpenSCManager()打开SCM, 使用CreateService()创建服务程序, 使用CloseServiceHandle()关闭服务程 序的句柄。

  19. 2)删除服务程序 使用OpenSCManager()打开SCM,使用 OpenService()打开服务程序,使用ControlService()设置服务程序的状态为停止。使用QueryServiceStatus查询服务程序的当前状态,如果当前状态为停止,调用DeleteService()删除服务程序。调用CloseServiceHandle()关闭OpenSCMan ager ()、 OpenService() 产生的句柄。

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

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

More Related