用 C 语言编写 Windows 服务程序的五个步骤.docx

用 C 语言编写 Windows 服务程序的五个步骤.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用 C 语言编写 Windows 服务程序的五个步骤 原文 : Yevgeny Menaker 翻译 : Northtibet 下载 源代码 原文 出处: Five Steps to Writing Windows Services in C 摘要 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(); 现在,准备工作 已经就 绪,你可 以开始编 码了。服务程序 控制台 程序的 一个子 集。因此,开始 你可以 定义一 个 main 函数 ,它是程 序的入口 点。对 于服务 程序来 说, main 的代码令 人惊讶 地简短 , 因为 它只创 建分派 表并启 动控制 分派机 。 void main()

文档评论(0)

hao187 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档