用C编写Windows服务程式的五个步骤

2008-02-23 05:05:45来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

Windows 服务被设计用于需要在后台运行的应用程式连同实现没有用户交互的任务。为了学习这种控制台应用程式的基础知识,C(不是C )是最好选择。本文将建立并实现一个简单的服务程式,其功能是查询系统中可用物理内存数量,然后将结果写入一个文本文档。最后,您能够用所学知识编写自己的 Windows 服务。

  当初我写第一个NT 服务时,我到 MSDN 上找例子。在那里我找到了一篇 Nigel Thompson 写的文章:“Creating a Simple Win32 Service in C ”,这篇文章附带一个 C 例子。虽然这篇文章很好地解释了服务的研发过程,但是,我仍然感觉缺少我需要的重要信息。我想理解通过什么框架,调用什么函数,连同何时调用,但 C 在这方面没有让我轻松多少。面向对象的方法固然方便,但由于用类对底层 Win32 函数调用进行了封装,他不利于学习服务程式的基本知识。这就是为什么我觉得 C 更加适合于编写初级服务程式或实现简单后台任务的服务。在您对服务程式有了充分透彻的理解之后,用 C 编写才能游刃有余。当我离开原来的工作岗位,不得不向另一个人转移我的知识的时候,利用我用 C 所写的例子就很容易解释 NT 服务之所以然。

  服务是个运行在后台并实现勿需用户交互的任务的控制台程式。Windows NT/2000/XP 操作系统提供为服务程式提供专门的支持。人们能够用服务控制面板来配置安装好的服务程式,也就是 Windows 2000/XP 控制面板|管理工具中的“服务”(或在“开始”|“运行”对话框中输入 services.msc /s——译者注)。能够将服务配置成操作系统启动时自动启动,这样您就不必每次再重启系统后还要手动启动服务。

  本文将首先解释如何创建一个定期查询可用物理内存并将结果写入某个文本文档的服务。然后指导您完成生成,安装和实现服务的整个过程。

  第一步:主函数和全局定义

  首先,包含所需的头文档。例子要调用 Win32 函数(windows.h)和磁盘文档写入(stdio.h):

#include <windows.h>
#include <stdio.h>

  接着,定义两个常量:

#define SLEEP_TIME 5000
#define LOGFILE "C:\\MyServices\\memstatus.txt"

  SLEEP_TIME 指定两次连续查询可用内存之间的毫秒间隔。在第二步中编写服务工作循环的时候要使用该常量。

  LOGFILE 定义日志文档的路径,您将会用 WriteToLog 函数将内存查询的结果输出到该文档,WriteToLog 函数定义如下:

int WriteToLog(char* str)
{
 FILE* log;
 log = fopen(LOGFILE, "a ");
 if (log == NULL)
  return -1;
 fprintf(log, "%s\n", str);
 fclose(log);
 return 0;
}

  声明几个全局变量,以便在程式的多个函数之间共享他们值。此外,做一个函数的前向定义:

SERVICE_STATUS ServiceStatus;
SERVICE_STATUS_HANDLE hStatus;

void ServiceMain(int argc, char** argv);
void ControlHandler(DWORD request);
int InitService();




[1] [2] [3] [4] 下一页

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C语言嵌入式系统编程修炼之内存操作

下一篇: 制作VC 应用程式的多媒体封面

热门词条
热门标签