您的位置:首页 > 编程语言 > C语言/C++

Windows下用C++编写服务程序

2011-04-26 22:45 435 查看
Windows下用C++编写NT Service程序

前言:

由于公司的需求,需要编写一个NT服务程序的基类.主要用于更方便的编写自己的NT服务程序.join经过几天的google,总算完全把NT服务程序的编写方法搞定了.

NT服务程序介绍:

在windows下打开 控制面板->>管理->>服务 可以看到当前系统中安装的一些服务,每一个服务都连接一个exe的可执行文件.在服务管理中可以对这些服务进行停止,运行和暂停的操作.

NT服务程序有以下特点:

1.没有窗口,一般只运行在控制台下.

2.可在用户登录前进行启动.

简单NT服务程序写方法:

1.新建一个控制台应用程序,在main 函数中调用StartServiceCtrlDispatcher注册一个service mian回调函数.注册成功后,程序进入到这个service main函数.并且退出时不经过控制台的main函数而直接退出.

2.在service main 函数中用 RegisterServiceCtrlHandler 注册给系统调用的control回调函数和你需要执行的代码.

3.运行dos命令 "SC Create ServiceName = pathexe", 其中ServiceName是你指定的服务名.pathexe是你指定的要连接的可执行文件的绝对路径(就是编译后的exe文件).

4.在服务管理中启动服务.

以上就是简单的C语言NT服务的编写方法.更详细的介绍请在google搜索"用C语言编写Windows服务程序的五个步骤".这篇文章详细介绍了如何用c语言写windows服务程序,并且比较简单.

C++编写服务程序:

由于考虑到代码的复用性和面向对象的方法,所以我实现了一个CX_NTService基类.

本类有如下特点:

1.可以不用了解windows服务程序的编写步骤.

2.可以更专心的去实现想要系统运行的服务.

3.复用性(面向对象最基本的特性)

CX_NTService 类的主要接口介绍

int RegisterService(TCHAR* ServiceName);

这个函数是本类的一个主要入口函数.它有两个功能:1.添加一个服务到系统中.2.注册serviemain函数到系统中.这两个功能不是同时运行的,当程序第一次运行时添加一个服务到系统中.以后运行则注册servicemain函数到系统中去.

由于windows 服务程序只能从服务控制管理器中去启动的这种特殊性,所以成功添加服务后直接返回到mian函数退出程序.

当用户从服务控制管理启动程序.成功调用StartServiceCtrlDispatcher函数后,此时程序进入到servicemain中,并且与main函数脱离关系,退出时也不会返回但main函数中.

virtual int Run() = 0;

纯虚函数,用户关键代码函数,所有继承此类的子类必须改写这个函数.

下面是程序源代码的下载地址:
http://download.csdn.net/source/3228508
by:Join
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: