WEB开发网
开发学院软件开发VC 用 C++ 创建简单的 Win32 服务程序 阅读

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

 2006-07-20 11:41:12 来源:WEB开发网   
核心提示: -v, 报告服务的名字和版本号; -i, 安装服务; -u, 卸载服务; 默认情况下,当系统启动该服务时没有命令行参数传递,用 C++ 创建简单的 Win32 服务程序(2),创建应用程序框架我一直都是创建基于 MFC 的应用程序,当我刚接触 Win32 服务程序时,并在你提供的消息表中查
  • -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。稍后我们会看到代码。

建立新工程时,我喜欢尽快看到运行结果,所以我决定服务程序要做的第一件事情是建立一个系统应用程序日志记录。借助这个日志记录机制,我能跟踪服务何时启动, 何时停止等等。我还可以记录服务中发生的任何出错信息。创建这个日志记录比我想象的要复杂得多。

建立日志记录

我想,既然日志文件是操作系统的一部分,那么肯定有应用程序编程接口(API)来支持建立日志记录。所以我开始搜索 MSDN CD,直到发现 ReportEvent 函数为止。如果你不熟悉这个函数,你可能会想,这个函数应该知道在哪个日志文件建立记录,以及你想要插入的文本信息。没错,这都是它要做的事情,但是为了简化出错信息的国际化,该函数有一个消息 ID 作为参数,并在你提供的消息表中查找消息。所以问题无非是你想将什么消息放入日志,以及如何将这些消息添加到你的应用程序中,下面我们一步一步来做:

上一页  1 2 3 4 5 6 7  下一页

Tags:创建 简单 Win

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接