您的位置:逆风者 VC++ 正文
原作者:火车采集器(http://www.locoy.com) 添加时间:2007-09-01 原文发表:2007-08-31 人气:219

本文章共9933字,分7页,当前第1页,快速翻页:
 

用 C 创建简单的 Win32 服务程序

作者:Nigel Thomson(MSDN 技术组)
翻译:NorthTibet

逆@风@者
原文出处:Creating a Simple Win32 Service in C

下载 NTService 例子源代码
下载 NTServCpl 例子源代码
下载 NTServCtrl 例子源代码

摘要

  本文描述如何用 Visual C 创建 Windows NT 服务程序。创建该服务仅用到一个 C 类,这个类提供服务与操作系统之间一个简单的接口。使用这个类实现自己的服务非常简单,只要改写少数几个基类中的虚拟函数即可。在本文有三个源代码参考例子:

  • NTService 是一个简单的 Win32 服务,它就是用本文所描述的方法建立的;
  • NTServCpl 是一个控制面版程序,用来控制 NTService 服务;
  • NTServCtrl 是一个独立的程序例子,用它可以监控某个 Win32 服务;

简介

  Windows NT 中的服务实际上是一个程序,只要计算机操作系统一启动,服务就可以运行其中。它不需要用户登陆。服务程序是一种与用户无关的任务,比如目录复制,进程监控或网络上供其它机器使用的服务,比如 HTTP 协议支持。
  创建Windows NT 服务程序并不是很难。但调试某个服务程序不是一件容易的事。就我自己而言,我喜欢用 Visual C 编写自己的 C 程序。大多数 Win32 服务都是用 C 写的,所以我觉得如果用某个 C 类来实现 Win32 服务的基本功能一定很有意思。有了这个 C 类,谁要想用 C 创建 Win32 服务就是一件很简单的事情了。我为此开发了一个 C 基类,用它作为编写 Win32 服务的起点应该没有什么大问题。

创建服务程序除了编写服务代码外,还必须做一些其它额外的编码工作:

  • 在系统日志或应用程序日志中报告警告信息和出错信息,不能用输出到屏幕的方式,因为用户根本就没有登陆。
  • 服务程序的控制即可以通过单独的应用程序,也可以通过控制面版程序。这取决于你的服务实现什么样的通讯机制。
  • 从系统中安装和卸载服务

  大多数服务程序都是使用一个安装程序来安装,而用另外一个程序来卸载。本文我将这些功能内建在服务程序自身当中,使之一体化,这样只分发一个.EXE文件即可。你可以从命令行直接运行服务程序,并且可以随心所欲地安装和卸载或报告其版本信息。NTService 支持下列的命令行参数:

  • -v, 报告服务的名字和版本号;
  • -i, 安装服务;
  • -u, 卸载服务;

默认情况下,当系统启动该服务时没有命令行参数传递。

创建应用程序框架

  我一直都是创建基于 MFC 的应用程序。当我刚接触 Win32 服务程序时,我先是用 Visual C AppWizard 创建一个 SDI/MFC 程序。然后去掉其中的文档和视图类、图标以及其它一些无用的东西,只剩下框架。结果到最后什么都去掉了,包括主窗口(服务程序不能有这个东东),什么也没有留下,非常愚蠢。我不得不 又回过头到 AppWizard,并用单个的源文件创建控制台程序,此源文件包含main 入口函数,我将这个文件命名为 NTServApp.cpp。我用此 cpp 扩展而不是用 C,因为我只想用C 来写程序,而不是直接用 C。稍后我们会讨论该文件代码实现。
  因为我想用 C 类来构建服务,所以我创建了 NTService.h 和 NTService.cpp 文件,用它们来实现 CNTService 基类。我还创建了 MyService.h 和 MyService.cpp 文件用于实现自己的服务类(CMyService),它派生于 CNTService。稍后我们会看到代码。
 

本文章更多内容1 - 2 - 3 - 4 - 5 - 6 - 7 - 下一页>>
相关文章

DataGrid的客户端分页
真正的全动态报表:RDLC ReportViewer
COM 组件设计与应用(十六)——连接点(vc.
如何实现Office式样的扁平组合框
在EVC3.0中使用数据库
浅谈PDFlib中文输出(二)如何在PDFlib中使
Brew 后台应用开发
VC中调用EXECL模板生成报表
在Visual C 中定制AppWizard (一)
连接 COM 与 .NET 的桥梁(一)——预备知识
层叠式窗体控件指南
基于 SSL 的 ASP.NET Web 应用测试自动化
Windows SDK笔记(七):创建MDI窗口
KVIP考勤系统
一个生成公章图片的简易工具

相关评论


本文章所属分类:首页 VC++

  热门关键字: